我想重命名多个文件:
qwsas_1.jpg >> 0001.jpg
2wase_2.jpg >> 0002.jpg
swaq2_3.jpg >> 0003.jpg
qweei_14.jpg >> 0004.jpg
dadaS_23.jpg >> 0005.jpg
aswee_35.jpg >> 0006.jpg
我使用这个命令:
a=1
for i in *.jpg; do
new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
mv -- "$i" "$new"
let a=a+1
done
但结果:
qwsas_1.jpg >> 0001.jpg
qweei_14.jpg >> 0002.jpg
2wase_2.jpg >> 0003.jpg
dadaS_23.jpg >> 0004.jpg
swaq2_3.jpg >> 0005.jpg
aswee_35.jpg >> 0006.jpg
我该怎么做代码?
答案 0 :(得分:0)
您可以在循环并重命名之前按文件编号对文件进行排序:
a=1
while read -r filename; do
new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
mv -- "$filename" "$new"
let a=a+1
done < <(ls *.jpg | sort -t_ -k2n)
示例运行:
renaming qwsas_1.jpg 0001.jpg
renaming 2wase_2.jpg 0002.jpg
renaming swaq2_3.jpg 0003.jpg
renaming qweei_14.jpg 0004.jpg
renaming dadaS_23.jpg 0005.jpg
renaming aswee_35.jpg 0006.jpg