Bash
glob匹配遞歸刪除除某個目錄以外的目錄
如何以遞歸方式刪除名稱以開頭的所有目錄,
app-deployment-*
但具有名稱的特定目錄除外app-deployment-245a578
。IE 使用全域匹配刪除所有目錄,但不刪除特定的已知命名目錄。rm -rf app-deployment-* # except app-deployment-245a578
find ./ -maxdepth 1 \ -type d \ -name 'app-deployment-*' \ ! -name 'app-deployment-245a578' \ -exec echo rm -rf {} +
說明:
-maxdepth 1
沒有遞歸的意思;-type d
意味著只搜尋目錄;-name 'app-deployment-*'
是您正在搜尋的目錄模式;! -name 'app-deployment-245a578'
是您從結果列表中排除的目錄模式 如果要排除多個目錄,請重複多次;
exec echo rm -rf
– 執行命令echo rm -rf
;{} +
– 將搜尋結果作為參數添加到上面的命令中。目錄名稱將像這樣添加:
echo rm -rf dir1 dir2 dir3
.關於最後一點。如果你想用每個參數分別呼叫命令(我的意思是
echo rm -rf dir1; echo rm -rf dir2;
),你應該寫{} \;
(注意反斜杠)而不是{} +
.關於命令。我寫
echo rm -rf
而不是因為使用任何類型的模式匹配rm -rf
的所有危險。在從命令中rm -rf
刪除之前要小心並檢查所有內容。echo
進一步閱讀有關 rm + 模式的危險: rm的創造性使用
**UPD:**值得注意的是
{} +
應該在命令的末尾,即不能使用-exec rm {} + -rf