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
备注:
展开 *.jpg
时,shell 按字母数字顺序列出文件。这似乎是你想要的。但请注意,字母数字顺序可能取决于语言环境。
顺序编号用$((i++))
完成。这里,$((...))
代表算术展开。 ++
仅表示将变量递增 1。
我在同一目录中有一堆文件,名称如下:
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
备注:
展开
*.jpg
时,shell 按字母数字顺序列出文件。这似乎是你想要的。但请注意,字母数字顺序可能取决于语言环境。顺序编号用
$((i++))
完成。这里,$((...))
代表算术展开。++
仅表示将变量递增 1。