Bash批量按顺序重命名文件

时间:2016-08-24 21:17:17

标签: bash rename file-rename batch-rename

我在同一目录中有一堆文件,名称如下:

IMG_20160824_132614.jpg

IMG_20160824_132658.jpg

IMG_20160824_132738.jpg

中间部分是日期,最后一部分是拍摄照片的时间。因此,如果我按照名称对这些文件进行排序,结果将与按修改日期/时间排序相同

我想使用bash将这些文件批量重命名为以下格式:

1-x-3.jpg

x表示顺序排序中文件的位置(按名称/时间修改排序)

所以上面的3个例子将被重命名为:

1-1-3.jpg

1-2-3.jpg

1-3-3.jpg

是否有可以实现此目的的bash命令?或者是需要脚本吗?

1 个答案:

答案 0 :(得分:4)

尝试:

i=1; for f in *.jpg; do mv "$f" "1-$((i++))-3.jpg"; done

例如,使用您的文件名:

$ ls
IMG_20160824_132614.jpg  IMG_20160824_132658.jpg  IMG_20160824_132738.jpg
$ i=1; for f in *.jpg; do mv "$f" "1-$((i++))-3.jpg"; done
$ ls
1-1-3.jpg  1-2-3.jpg  1-3-3.jpg

注意:

  1. 展开*.jpg时,shell会按字母数字顺序列出文件。这似乎是你想要的。但请注意,字母数字顺序可能取决于区域设置。

  2. 顺序编号是使用$((i++))完成的。这里,$((...))表示算术扩展。 ++只是意味着将变量增加1。