批量重命名文件夹中的文件

Kev*_*vin 10 rename batch-rename

如何从文件夹中的文件名中删除一些文本?

我目前正在尝试:

rename s/"NEWER_(.*?)"//g *
Run Code Online (Sandbox Code Playgroud)

但没有什么被重命名

我有一个父文件夹,里面有一堆子文件夹,里面有文件,OneDrive 认为将“(NEWER_timestamp)”附加到其中是个好主意,我想删除它。

示例文件名:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)
Run Code Online (Sandbox Code Playgroud)

αғs*_*нιη 8

请尝试以下操作:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
Run Code Online (Sandbox Code Playgroud)
  • All[^/]*(.*) .*$仅匹配路径的最后一部分不包含/. 和
  • 在上面的正则表达式中,(.*)是一组匹配最后/一个空格之前的所有内容。它的反向引用将是$1.
  • .*$$空格后匹配文件名末尾的所有内容。
  • 最后,在 rename 的替换部分s/.../REPLACEMENT/,我们只保留了位于 last\(.*)称为匹配组的空格之间的匹配组。