我在同一目录中有一堆文件,名称如下:
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命令?或者是需要脚本吗?
答案 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
注意:
展开*.jpg
时,shell会按字母数字顺序列出文件。这似乎是你想要的。但请注意,字母数字顺序可能取决于区域设置。
顺序编号是使用$((i++))
完成的。这里,$((...))
表示算术扩展。 ++
只是意味着将变量增加1。