Bash 按顺序批量重命名文件

Bash batch rename files in order

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

IMG_20160824_132614.jpg

IMG_20160824_132658.jpg

IMG_20160824_132738.jpg

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

排序相同

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

1-x-3.jpg

其中x表示文件在顺序排序中的位置(排序由name/time修改)

因此上面的 3 个示例将重命名为:

1-1-3.jpg

1-2-3.jpg

1-3-3.jpg

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

尝试:

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。