如何在终端命令中将多个文件的数字顺序重命名为1,2或3位为4位?

时间:2017-02-20 01:24:19

标签: linux

我想重命名多个文件:

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

refer

但结果:

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

我该怎么做代码?

1 个答案:

答案 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