文件重命名正则表达式添加不需要的后缀

时间:2012-05-31 21:51:07

标签: regex linux rename

我遇到rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg

的问题

zzr31_120x120.jpg已重命名为zzr31_120x120_120x120.jpg

如何更清楚地说明它只会重命名那些没有120х120的人? 最重要的是,如果可能的话,不仅要jpg,而且要在一个命令中使用gifpng

2 个答案:

答案 0 :(得分:1)

您需要使用negative lookahead并使用正则表达式来匹配您选择的扩展名,重命名时只考虑每个文件*

所以无论如何,这是我的建议

rename -n 's/^((?:(?!_120x120).)*)\.(jpg|png|gif)$/$1_120x120.$2/' *

删除-n以使其正常运行,否则它只显示它将重命名的内容并且实际上不会重命名

答案 1 :(得分:0)

您需要使用名为negative look-behind assertions的内容;查看perlre(1)文档以获取完整详细信息。我在使用确切的语法时遇到了麻烦,这是我最后的努力:

/(.*)\K120x120\.(jpg|gif|png)/$1_120x120.$2/

更简单的答案是首先移开“好”文件:

mkdir foo
mv *_120x120.* foo
rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg
mv foo/* .
rmdir foo