Vidal Asked: 2020-06-10 13:16:12 +0800 CST2020-06-10 13:16:12 +0800 CST 2020-06-10 13:16:12 +0800 CST 重命名文件和目录 772 我有大量的文件电影和目录,其命名结构是: 电影名称(作者,年份) 或 电影名称(作者,年份)LANG 我打算以这种方式重命名它们(几乎三千) 作者 - 电影名称 - 年份 - LANG 或与此非常相似的东西。 我的问题是:有没有办法用一个简单的脚本进行批量重命名? 提前非常感谢,伙计们。 scripts directory files batch rename 2 个回答 Voted Best Answer steeldriver 2020-06-10T16:20:56+08:002020-06-10T16:20:56+08:00 尽管您可以在基于 perl 的rename工具中使用正则表达式捕获组来执行此操作,但我对此的选择可能是mmvex。 $ mmv -n '* (*, *) *' '#2 - #1 - #3 - #4' Name of the film (Author, year) LANG -> Author - Name of the film - year - LANG 带组件和不带LANG组件的情况最容易单独处理 - 对于后一种情况,您可以将命令简化为 mmv -n '* (*, *)' '#2 - #1 - #3' contrib 模块也可能发生类似的事情zsh:zmv % zmv -n '(*) \((*), (*)\) (*)' '$2 - $1 - $3 - $4' mv -- 'Name of the film (Author, year) LANG' 'Author - Name of the film - year - LANG' -n当您对转换是正确的感到高兴时删除(一个明显的问题是如果Name of the film包含括号)。 Vidal 2020-06-11T08:40:50+08:002020-06-11T08:40:50+08:00 Steeldriver 提供的第一个解决方案完美运行。在某些情况下,必须进行小的更改,因为某些电影名称与 LANG 无关。 顺便说一句,这如何在递归模式下完成?我在 mmv 文档中没有找到该选项。 我回答自己。经过一些互联网挖掘和一些测试,我可以设法更改文件夹中包含的文件。这 ; 用于指示系统(不带 -r)进入文件夹。但是; 将成为第一个变量,因此顺序将如下所示: mmv ';* (*, )。' '#1#3 - #2 (#4).#5' 在这种情况下,#1 对应于 ; 其余的是名称更改的一部分。 所以,非常感谢 steeldriver 教我一个新的强大的工具来批量重命名 esaly。还要感谢 Elia Kagan 的评论。
尽管您可以在基于 perl 的
rename
工具中使用正则表达式捕获组来执行此操作,但我对此的选择可能是mmv
ex。带组件和不带
LANG
组件的情况最容易单独处理 - 对于后一种情况,您可以将命令简化为contrib 模块也可能发生类似的事情
zsh
:zmv
-n
当您对转换是正确的感到高兴时删除(一个明显的问题是如果Name of the film
包含括号)。我回答自己。经过一些互联网挖掘和一些测试,我可以设法更改文件夹中包含的文件。这 ; 用于指示系统(不带 -r)进入文件夹。但是; 将成为第一个变量,因此顺序将如下所示:
mmv ';* (*, )。' '#1#3 - #2 (#4).#5'
在这种情况下,#1 对应于 ; 其余的是名称更改的一部分。
所以,非常感谢 steeldriver 教我一个新的强大的工具来批量重命名 esaly。还要感谢 Elia Kagan 的评论。