在Bash中批量按顺序重命名文件

5
我有一堆文件在同一个目录下,名称类似于:
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命令?还是需要脚本?

“x代表文件的位置” - 什么位置? - Pedro Lobito
1个回答

10

尝试:

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接