0

我有问题rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg

zzr31_120x120.jpg改名为zzr31_120x120_120x120.jpg

我怎样才能更清楚地表明它只会重命名那些没有 120х120 的?最重要的是,如果可能的话,不仅要做到这一点,而且jpg还要在一个命令中做到这一点?gifpng

4

2 回答 2

1

您需要使用负前瞻并使用正则表达式来匹配您选择的扩展名,从而使重命名仅考虑每个文件 *

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

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

删除 -n 以使其正常工作,否则它只会显示它将重命名的内容而不会实际重命名

于 2012-05-31T22:21:35.200 回答
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
于 2012-05-31T22:19:34.650 回答