我试图用“重命名”重命名一堆文件,并且我的regex设置得很好:
rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *
但是我真的很希望每个文件都被放入一个目录中,并且有一个共同的开始,所以我尝试了一下:
rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *
但是这会抱怨没有一个目录存在(因为它们不存在)。我是否遗漏了一个有用的重命名标志,还是它们是一个更好的工具?
发布于 2020-09-29 06:39:39
如果您使用的是基于Perl的rename,那么没有什么可以阻止您调用mkdir()来创建缺少的目录:
rename --verbose '
s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
mkdir("$2 ($1)")' *这与您使用的Perl表达式相同,在结束时添加了对mkdir()的调用,以便在表达式匹配的情况下创建目录。
原始替换是否正确,或者是否有意义,我不知道(我不知道您有什么类型的文件名)。关键是,由于表达式是一个通用的Perl表达式,只要$_ (默认变量)在最后设置为结果文件名,您就可以自由使用任何Perl代码。
https://unix.stackexchange.com/questions/611939
复制相似问题