![重命名文件和目录](https://linux22.com/image/1173794/%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95.png)
我有大量的文件影片和目录,其命名结构如下: 电影名称(作者、年份) 或者 电影名称(作者,年份) LANG
我打算以这种方式重命名它们(近三千个)
作者 - 电影名称 - 年份 - LANG
或者与此非常相似的东西。
我的问题是:有没有办法用简单的脚本进行批量重命名?
提前感谢大家。
答案1
虽然您可以使用基于 perl 的rename
工具中的正则表达式捕获组来执行此操作,但我的选择可能是mmv
ex。
$ 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'
zsh
使用contrib 模块也可以实现类似的事情zmv
:
% zmv -n '(*) \((*), (*)\) (*)' '$2 - $1 - $3 - $4'
mv -- 'Name of the film (Author, year) LANG' 'Author - Name of the film - year - LANG'
-n
当您对转换正确性感到满意时,请删除(一个明显的陷阱是 if Name of the film
ever 包含括号)。
答案2
- steeldriver 提供的第一个解决方案非常完美。在某些情况下,必须进行一些小改动,因为有些电影名称没有关联的 LANG。
- 顺便问一下,如何在递归模式下完成此操作?我在 mmv 文档中没有找到该选项。
我对自己说。经过一些互联网搜索和一些测试,我可以设法更改文件夹中包含的文件。; 用于指示系统(不带 -r)深入文件夹。但; 将成为第一个变量,因此顺序将如下所示:
mmv';*(*,)。''#1#3 - #2 (#4).#5'
在这种情况下,#1 对应于;其余的是名称更改的一部分。
所以,非常感谢steeldriver教我一个新而强大的工具来轻松批量重命名。也感谢Elia Kagan的评论。