2012-05-31 19 views
0

我有rename -v 's/\.jpg$/\_120x120.jpg/' *.jpg文件重命名正則表達式增加不必要的後綴

zzr31_120x120.jpg問題更名爲zzr31_120x120_120x120.jpg

我怎樣才能使它更清楚,它只會重命名這些沒有120х120? 最重要的是,如果可能的話,在一個命令中不僅可以使用jpg,還可以使用gifpng

回答

1

你需要使用negative lookahead和使用正則表達式來匹配您的選擇擴展,使得重命名考慮每個文件只有*

所以,無論如何,這是我的建議

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

刪除-n使其功能,否則它只會顯示它將重命名的內容,實際上不會重命名

+0

謝謝你做了伎倆^^ – fob

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