将文件重命名到子目录中

将文件重命名到子目录中

我正在尝试使用“重命名”重命名一堆文件,并且我的正则表达式设置得很好:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *

但我真的很想将每个文件放入一个具有共同开头的目录中,所以我尝试了:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *

但这抱怨没有一个目录存在(因为它们不存在)。我是否缺少一个有用的重命名标志,或者它们是一个更好的工具吗?

答案1

如果您使用的是基于 Perl 的rename,那么没有什么可以阻止您调用mkdir()创建丢失的目录:

rename --verbose '
    s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
    mkdir("$2 ($1)")' *

这与您使用的 Perl 表达式相同,但mkdir()在末尾添加了一个调用,以便在表达式匹配时创建目录。

原始替换是否正确,或者是否有意义,我不知道(我不知道你有什么类型的文件名)。要点是,由于表达式是通用 Perl 表达式,因此您可以自由使用任何 Perl 代码,只要将$_(默认变量)设置为末尾的结果文件名即可。

相关内容