发布时间: 2022-03-05T03:57:47+08:00
虽然很简单但是还是踩了一下午的坑,可以点进来看看我的解决方法多神奇
最开始想着直接find出来然后xargs到mv,直接mv -t解决
结果出现了问题:重名文件没法处理
为了解决问题,使用了mv -b
,这样出现重名的时候就会自动重命名为*.png~
然而,新的问题来了。当一个以上的1.png
出现的时候,mv只会做一次-b
操作,于是就有很多的图片遗留下来了
为了避免遗留,我写了循环,判定条件是文件夹里是否还有png文件,如果有,就再执行一次mv
结果是莫名其妙的少了很多图片(还好在测试环境测试的,不然我的资源就……
只好换方法玩
尝试find exec
,每找到一个png执行一次转移,失败,发现这个exec又限制
一次一行发mv,结果还是少图片
这时候突然发现:既然要放弃文件名了,为什么不自己指定呢?
于是用了一个let i+=1
终于跑通了,但是处理1000+文件的时候,kodexplorer会从1,10,100开始排序。。。看图也要讲究顺序好吧
查找得printf
可以格式化输出,输出0001,0002就不会被kod排序错误了,没有深究格式化输出原理,引例一个如下
name=`printf "%06d\n" $i`
#%06d\n的意思:%0:用0填充空位;6:一共六位数
#$i是一个自增变量
于是终于有了这个东西
#!/bin/bash
mkdir -p ../转移后/
png_still_exist="1"
i=0
until [ "$png_still_exist" = "" ]
do
png_still_exist=`find -name "*.png"`
let i+=1
name=`printf "%06d\n" $i`
find -name "*.png" | head -n 1 | xargs -I file mv -v file ../转移后/$name.png
done
mv ../转移后 .
脚本里可以直接看出我的思路历程。。。明显遗留了那个反复找png的循环
然而当时的我很纯真,一点都不觉得这样效率奇差& io爆炸,觉得可以用了,直到我开始写复制脚本的时候才发现没必要再这么做了。。。
最后利用sed解决
#!/bin/bash
mkdir -p ../转移后/
pngi="1"
i=0
pngi=`find -name "*.png"`
until [ "$pngi" = "" ]
do
let i+=1
name=`printf "%06d\n" $i`
echo "$pngi" | head -n 1 | xargs -I file mv -v file ../转移后/$name.png
pngi=`echo "$pngi" | sed '1d'`
done
mv ../转移后 .
终于达到可用的程度了,不敢相信这东西我干了快6个小时。。。主要是校园网很不稳定+momo-daemon
还没完全改造好(今天边踩坑边修复。。。)(这东西的文案不太适合发出来。。。过于emmmm。然而一个自动执行脚本的daemon还是很有趣的,有时间修改一下措辞再开源出来)
完整的脚本在这里
源仓库已删除,请查看
https://gitee.com/shenmo7192/momo-and-mox-tool-scripts/tree/master/lick-scripts
欢迎拿去用~