2014-06-05 78 views
4

我想寫一個命令,從當前目錄及其所有相關的子目錄遞歸地刪除具有不同擴展名(* .extension1,* .extension2等)的幾個文件。如何遞歸刪除具有不同擴展名的多個文件?

到目前爲止,我從another post得到這個命令,但我不能鍛鍊如何將其在同一命令行適應多個文件:

find . -name "*.extension1" -type f -delete 

是那麼簡單,如下?

find . -name "*.extension1";"*.extension2" -type f -delete 

正如側面說明,這些都是我不需要所有輸出文件,但不是所有的都一定總是輸出,所以某些擴展可能不存在。這只是一般的清理命令。

回答

8
find . \(-name "*.extension1" -o -name "*.extension2" \) -type f -delete 

查找文件(-name 「py」 爲-o -name 「的.html」)-exec文件{} \;

OR

find . -regextype posix-egrep -regex ".*\.(extension1|extension2)$" -type f -delete 
+0

你好@BroSlow,我不確定你到底在問我什麼。第一個建議沒有奏效。第二個是。 – Fiztban

+1

@Fiztban我想BrowSlow問我。 –

+0

對不起,我只是意識到一些文件出來擴展是不可預測的,但擴展名之前,例如mpd2.xxxxxxxxx其中xxx是一個隨機生成的輸出。你可以包括一種方法來刪除這些或更容易作爲第二個命令? – Fiztban

2

只需添加更多選項。正則表達式解決方案也可以應用,但是這個更好更安全。

find . \(-name '*.ext1' -or -name '*.ext2' \) -type f -delete 

編輯:您可能還需要-or。在刪除之前,先測試一下沒有-delete選項。 (2)按照gniourf_gniourf的建議添加一對()

+0

感謝您的回覆。第一次迭代沒有奏效,再次嘗試編輯。 – Fiztban

+0

不幸的是,它仍然沒有工作。我也試過''* .ext1「' – Fiztban

+1

@Fiztban你的'find'可能不是基於GNU的或者是舊版本。你可以嘗試其他建議。 – konsolebox

1

也許正則表達式會幫助你

find . -regextype posix-awk -regex "(.*.ext1|.*.ext2)" -type f -delete 
0

這個簡單的命令將在該目錄中刪除所有文件與擴展1和擴展名2遞歸。 rm find . -name *.extension1 -o -name *.extentions2

+0

它在bash + Redhat 6上不適用於我 – syam

相關問題