我有问题rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg
zzr31_120x120.jpg
改名为zzr31_120x120_120x120.jpg
我怎样才能更清楚地表明它只会重命名那些没有 120х120 的?最重要的是,如果可能的话,不仅要做到这一点,而且jpg
还要在一个命令中做到这一点?gif
png
您需要使用负前瞻并使用正则表达式来匹配您选择的扩展名,从而使重命名仅考虑每个文件 *
所以无论如何,这是我的建议
rename -n 's/^((?:(?!_120x120).)*)\.(jpg|png|gif)$/$1_120x120.$2/' *
删除 -n 以使其正常工作,否则它只会显示它将重命名的内容而不会实际重命名
你需要使用一个叫做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