我遇到rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg
zzr31_120x120.jpg
已重命名为zzr31_120x120_120x120.jpg
如何更清楚地说明它只会重命名那些没有120х120的人?
最重要的是,如果可能的话,不仅要jpg
,而且要在一个命令中使用gif
和png
?
答案 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