會有怎樣可以刪除該文件所在,猶如查找文件,並刪除父級目錄
find . -type f -name "*.root" -size 1M
發現find
命令的父目錄(只以上一個級別),它返回
./level1/level1_chunk84/file.root
所以,我想這樣做實際上是遞歸刪除例如level_chunck84 DIR ..
感謝
會有怎樣可以刪除該文件所在,猶如查找文件,並刪除父級目錄
find . -type f -name "*.root" -size 1M
發現find
命令的父目錄(只以上一個級別),它返回
./level1/level1_chunk84/file.root
所以,我想這樣做實際上是遞歸刪除例如level_chunck84 DIR ..
感謝
你可以嘗試這樣的:
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%/*}'
謝謝......雖然我希望能有更簡單的東西 –
我已經加入到幾點意見幫助你瞭解發動機罩下發生了什麼 –