我想将目录中的文件重命名为连续数字。基于文件的创建日期。例如sadf.jpgto 0001.jpg,wrjr3.jpgto 0002.jpg等,前导零的数目取决于文件的总数(如果不需要,则不需要额外的零)。
3 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
尝试使用循环let和printf进行填充:
a=1
for i in *.jpg; do
new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
mv -i -- "$i" "$new"
let a=a+1
done
使用该-i标志可防止自动覆盖现有文件。
慕工程0101907
TA贡献1887条经验 获得超5个赞
我喜欢gauteh的解决方案,因为它简单易用,但它有一个重要的缺点。当在成千上万个文件上运行时,您可能会收到“参数列表过长”的消息(有关更多信息),其次,脚本会变得非常慢。就我而言,在大约36.000个文件上运行它,脚本移动了大约。每秒一件!我不太确定为什么会这样,但是我从同事那里得到的规则是“ find是你的朋友”。
find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command
为了计数项目和构建命令,使用了gawk。注意主要区别。默认情况下find,在当前目录及其子目录中搜索文件,因此请确保在必要时仅在当前目录中进行搜索(man find以了解操作方法)。
- 3 回答
- 0 关注
- 778 浏览
添加回答
举报
0/150
提交
取消