我有一千个 avi 和 jpg 混合文件,它们被命名为
01 09 52 PM 27-03-2019-A.avi
01 09 52 PM 27-03-2019-A.jpg
01 09 55 PM 26-03-2019-A.avi
01 09 55 PM 26-03-2019-A.jpg
我希望像这样把日期放在第一位
27-03-2019-A 01 09 52 PM.avi
请问我该怎么做?
答案1
来自file-rename
rename
包裹:
file-rename -n 's/(.*PM) (.*-A)/$2 $1/' *
这将首先打印更改,然后删除-n
标志以实际执行操作。s
ubstitute 表达式将以“PM”结尾的第一个字符串和以“-A”结尾的下一个字符串(中间没有空格)分成两组,然后以相反的顺序替换它们,并在它们之间留一个空格。请注意,*
需要每一个当前目录中的文件,如果要匹配子集,请更改它,例如*-A.*
对于名称中包含“-A.”的每个文件。
如果您不想安装任何东西,您可以使用bash
和进行重命名mv
:
for i in *; do
echo mv -i "$i" "${i:12:12} ${i:0:11}.${i/*.}"
done
mv
这将循环打印重命名命令的文件,删除echo
实际重命名文件的命令。它使用bash
参数扩展从输入文件名中获取相关字符串。
示例运行
请注意,我已rename
链接到file-rename
使用替代系统。
$ touch "01 09 52 PM 27-03-2019-A.avi"
$ rename -n 's/(.*PM) (.*-A)/$2 $1/' *
rename(01 09 52 PM 27-03-2019-A.avi, 27-03-2019-A 01 09 52 PM.avi)
$ rename 's/(.*PM) (.*-A)/$2 $1/' *
$ ls
27-03-2019-A 01 09 52 PM.avi
$ rm 27-03-2019-A\ 01\ 09\ 52\ PM.avi
$ touch "01 09 52 PM 27-03-2019-A.avi"
$ for i in *;do echo mv "$i" "${i:12:12} ${i:0:11}.${i/*.}";done
mv 01 09 52 PM 27-03-2019-A.avi 27-03-2019-A 01 09 52 PM.avi
$ for i in *;do mv "$i" "${i:12:12} ${i:0:11}.${i/*.}";done
$ ls
27-03-2019-A 01 09 52 PM.avi