2011-07-27 25 views
0

我剛剛遞過一個包含大約40,000個圖像的目錄,並且該目錄包含每個文件的三個版本,這使得它不得不在服務器之間進行傳輸。如何在文件擴展名之前刪除具有某種後綴的所有文件

我正在尋找一種使用bash(OSX終端)查找和刪除(rm)所有文件的方法,例如,_web或_thumb位於文件名末尾的.jpg(或。 gif或.png或.bmp等)擴展名。

所以,要清楚,我有以下文件:

1.jpg 
1_web.jpg 
1_thumb.jpg 
2.gif 
2_web.gif 
2_thumb.gif 
etc. 

我只希望 「1.JPG」, 「2.gif」 等依然存在。

我已經可以重命名擴展名了,但是我的命令行fu非常弱,而且我正努力想找出可重用的東西(我需要做這個幾次,因爲我正在爲這個項目開發一個連續的遷移腳本)。

編輯:經過多一點工作後,我發現rm和xargs的一些奇怪的限制,我不得不解決。我基本適應接受的答案下方,結束了:

$ find . -name '*_thumb.*' -print0 | xargs -0 rm -f 
$ find . -name '*_web.*' -print0 | xargs -0 rm -f 

現在只剩下大約10,000個文件 - 相當節省圍繞推動在網絡上的文件的條款!

回答

2

一個(相對強勁)選項來運行

find . -iregex ".*\(_web\|_thumb\)\.\(jpg\|png\|bmp\)" -delete 

假設你沒有比在目錄中的圖像文件之外的任何其他(簡單)選項來運行

rm *_web.* *_thumb.* 

警告:這也會刪除名爲類似my_web.file.jpg的文件,因此如果您想要安全地玩遊戲,則必須添加所有擴展程序,而不是依靠。* 如果您知道您的擴展程序是總是要3個字符長,你可以使用就像* _thumb一樣。

+0

我發現居然有室爲它多少可以接受的參數限制通過通配符(所以第二個例子不能很好地工作)。請參閱:http://www.moundalexis.com/archives/000035.php – geerlingguy

0

我沒有MAC或在我的面前UNIX終端,但我想類似如下的可能工作

rm *_web.jpg 
rm *_web.jpg 
rm *_thumb.gif 
相關問題