0

在我在linux/home/myself/Pictures/travels上的文件夹中,我有文件, , , , .Fedora 17IMG_2516.JPGIMG_2519.JPGIMG_2520.JPGIMG_2525.JPGIMG_2528.JPG

我想从左到右一一重命名它们,IMG_2516.JPG变成01.JPG, IMG_2519.JPG- 02.JPG, IMG_2520.JPG- 03.JPG, IMG_2525.JPG- 04.JPG, IMG_2528.JPG- 05.JPG

请注意,相邻数字可以靠近(如 2519 和 2520)也可以远离(2516 和 2519),但总是增加。

如何编写终端脚本来替代例程。例如,给出了这些数字,还有更多文件,目前我只能手动重命名它们(非常耗时)。

4

1 回答 1

0

如果图像都具有相同的位数:

I=1
for F in IMG_*.JPG; do
    mv "$F" IMG_$(printf "%02d" $I).JPG
    I=$(( I + 1 ))
done

除此以外,

LIST=$(mktemp)
find . -maxdepth 1 -iname "*.jpg" > $LIST
sort -n -o $LIST $LIST
I=1
cat $LIST | while read F; do
    mv "$F" IMG_$(printf "%02d" $I).JPG
    I=$(( I + 1 ))
done
rm "$LIST"

第一个意思是:每张图片,移动到IMG_0I.JPG,I加1。

第二个意思是:

  • 做一个临时文件

  • 找到目录中的所有 JPG 文件(而不是子目录,不区分大小写),在临时文件中每行保存一个。

  • 按它们的数字顺序(-n)对它们进行排序并写回临时文件(-o)

  • 将文件的内容发送到以下位置:

-- 虽然有下一行,

-- -- 存放在 F

-- -- 将具有该名称的文件移动到 I,其中 I 用两位数字表示并用前导零填充,以 IMG_ 为前缀,以 .JPG 为后缀

-- -- 增加我

于 2013-08-04T21:35:31.947 回答