Shell-Script在工作目錄中找到所有目錄(
在工作目錄中找到所有目錄(encoded
除外),然後刪除所有目錄
我正在嘗試測試這種情況,我有這些文件
/encoded encode <~~~ a bash script /dir1 /dir2 .../dir2-sub test.meta
我希望的是,
find
搜尋我們目前(除外)編碼中的所有目錄,然後刪除所有目錄我最終使用了這個腳本:
find . -name encoded -prune -o -maxdepth 10 ! -name 'encode*' ! -name '.*' | xargs rm -rf
我相信它會做的是,標記文件夾
encoded
然後-prune
它,所以它會忽略它,對吧?然後對於任何其他沒有副檔名的(確保所有這些都是dir)通過刪除它rm
但問題是……我還有一個沒有副檔名的 bash 腳本,所以它最終被刪除了
我希望我的 bashscript 最終從上面的結構完全像這個結構(保持所有非 dir 完整,不要觸摸 /encoded 文件夾及其內容,不要刪除編碼 bash 腳本)
/encoded encode <~~~ a bash script test.meta
我怎樣才能得到上面的結果?
您不需要遞歸列舉目錄來刪除它們
rm -rf
; 您可以簡單地列出要刪除的頂級目錄。要判斷一個目錄項是否是目錄而不是文件,可以使用find
’-type d
test; using.
不是一個好的指標。以下內容應該適合您:
find * -maxdepth 0 ! -name encoded -type d -print0 | xargs -0 rm -rf
這從目前目錄中的所有條目開始(以避免列出
.
),刪除名稱為 的任何內容encoded
,並僅保留目錄;它使用 null 作為分隔符輸出結果,並將結果輸入xargs
到 give torm -rf
。在執行此變體之前,請嘗試find * -maxdepth 0 ! -name encoded -type d
查看輸出是否符合您的預期。
-prune
不會忽略它的匹配,它會避免下降到它;所以在你的例子中,encoded
仍然列出,然後被-name
測試過濾。