Bash 脚本用于分隔并将日期移动到文件名的前面

Bash 脚本用于分隔并将日期移动到文件名的前面

我有一千个 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-renamerename 安装重命名包裹:

file-rename -n 's/(.*PM) (.*-A)/$2 $1/' *

这将首先打印更改,然后删除-n标志以实际执行操作。substitute 表达式将以“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

相关内容