我正在尝试使用“重命名”重命名一堆文件,并且我的正则表达式设置得很好:
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 代码,只要将$_
(默认变量)设置为末尾的结果文件名即可。