2012-10-23 73 views
54

在Linux中,如何刪除文件夾層次結構中嵌套的特定名稱的文件夾?如何刪除特定名稱的文件夾

下面的路徑在一個文件夾下,我想刪除名爲a的所有文件夾。

1/2/3/a 
1/2/3/b 
10/20/30/a 
10/20/30/b 
100/200/300/a 
100/200/300/b 

我應該從父文件夾使用哪些Linux命令?

回答

67

如果目標目錄是空的,使用發現,只有目錄,過濾器過濾器按名稱,執行命令rmdir:

find -type d -name a -exec rmdir {} \; 

如果你想遞歸地刪除它的內容,通過-delete-prune -exec rm -rf {} \;更換-exec rmdir {} \;。其他答案包括有關這些版本的詳細信息,也可以相信。

79

使用查找名爲「a」和執行rm以刪除按照你的意願的命名,具體如下:首先使用LS

find . -name a -exec rm -rf {} \; 

測試列出:

find . -name a -exec ls {} \; 

爲了確保這隻會刪除目錄而不是純文件,請使用「-type d」參數(如註釋中所示):

find . -name a -type d -exec rm -rf {} \; 

「{}」是對每個找到的文件「a」的替換 - 通過替換對每個文件執行exec命令。

+2

你可能想增加一個 「型d」在那裏只需要一個文件匹配相同的名稱。 –

+1

另外請注意,這將會產生類似'1/2/a/3/4'的情況,這可能不是有意的,所以建議先+1測試... – twalberg

+2

reco'echo {}'先測試它,而不是'ls {}' – charneykaye

10
find ./ -name "FOLDERNAME" | xargs rm -Rf 

應該這樣做。警告,如果您不小心將./泵入xargs rm -Rf,您的整個計算機將被刪除,但沒有選項將其取消,需要重新安裝操作系統。

+0

這一個適合我,thx! – DarkteK

+0

哦,只是那個小小的風險。這就是全部?哈哈。非常感謝您的警告。我肯定會犯這種打字錯誤。 – TinkerTenorSoftwareGuy

21

這也適用 - 它會刪除所有名爲「a」和其內容的文件夾:

rm -rf `find -type d -name a` 
+4

這是唯一實際工作的人。 – Buffalo

+0

@Buffalo,怎麼樣?這個defo的作品,但其他人也是如此。會驚訝地發現一個env在哪裏工作,但其他人沒有給出所有的答案基本上是'find/rm'。 – wmorrison365

+2

@ wmorrison365因爲如果你做'找。 -name a -exec rm -rf {} \;',當它試圖進入那個目錄來尋找更多的項目時會發現崩潰,給你一個錯誤,比如'find:'1/2/3/a':No such文件或目錄「。 –

6

我有超過100個文件,如

log-12 
log-123 
log-34 
.... 

以上的答案對我來說沒有工作

但下面的命令幫助了我。

find . -name "log-*" -exec rm -rf {} \; 

我給-type.所以它刪除與log-

rm -rf開始刪除文件夾遞歸即使它有文件文件和文件夾。

find -type d -name foo -a -prune -exec rm -rf {} \; 

其他的答案是缺少一個重要的:如果你想單獨的文件夾單獨

find -type d -name "log-*" -exec rm -rf {} \; 

文件

find -type f -name "log-*" -exec rm -rf {} \; 
6

要刪除名爲foo的所有目錄,運行

事情:-prune選項。如果沒有-prune,GNU find將刪除名稱匹配的目錄,然後嘗試緩存到目錄中以查找更多匹配的目錄。 -prune選項告訴它不遞歸到符合條件的目錄中。

1

還有一句:

"-exec rm -rf {} \;" can be replaced by "-delete" 

find -type d -name __pycache__ -delete  # GNU find 
find . -type d -name __pycache__ -delete # POSIX find (e.g. Mac OS X) 
0

查找路徑/到/的/文件夾-maxdepth 1個-name 「MY_ *」 型Ð-delete

相關問題