2015-06-29 78 views
0

會有怎樣可以刪除該文件所在,猶如查找文件,並刪除父級目錄

find . -type f -name "*.root" -size 1M

發現find命令的父目錄(只以上一個級別),它返回

./level1/level1_chunk84/file.root

所以,我想這樣做實際上是遞歸刪除例如level_chunck84 DIR ..

感謝

回答

1

你可以嘗試這樣的:

find . -type f -name "*.root" -size 1M -print0 | \ 
xargs -0 -n1 -I'{}' bash -c 'fpath={}; rm -r ${fpath%%$(basename {})}' 

find + xargs組合是很常見的。請參閱man find,您會發現一些示例,說明如何將它們一起使用。

我所做的一切在這裏我只是簡單地添加-print0標誌你原來的發現聲明:

-print0 真;在標準輸出上打印完整文件名,後跟一個空字符(而不是-print 使用的換行符)。這允許包含換行符或其他類型的空格的文件名由程序正確解釋, 處理查找輸出。該選項對應於xargs的-0選項。

然後通過管道輸送出去的一切xargs其作爲一個輔助手藝進一步的命令:
- 執行一切bash子shell
- 指定文件路徑變量fpath={}
- 從你的文件路徑

提取 dirname

$ {parameter %% word} 刪除匹配的後綴模式。這個詞被擴展爲產生一個模式,就像路徑名擴展一樣。如果模式匹配參數擴展值的尾部 ,則擴展結果是參數的擴展值,其中 最短匹配模式(%'' case) or the longest matching pattern (the %%的情況)被刪除。如果參數是@或*,則將依次對每個位置參數應用 模式刪除操作,並且擴展是結果列表。如果參數是 以@或*爲下標的數組變量,則模式刪除操作將依次應用於數組的每個成員,並且擴展是結果列表。

- 最後遞歸刪除

也有它的短一些的版本:

find . -type f -name "*.root" -size 1M -print0 | \ 
xargs -0 -n1 -I'{}' bash -c 'fpath={}; rm -r ${fpath%/*}' 
+0

謝謝......雖然我希望能有更簡單的東西 –

+0

我已經加入到幾點意見幫助你瞭解發動機罩下發生了什麼 –

相關問題