Shell-Script

在工作目錄中找到所有目錄(encoded 除外),然後刪除所有目錄

  • April 6, 2019

我正在嘗試測試這種情況,我有這些文件

/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 dtest; using.不是一個好的指標。

以下內容應該適合您:

find * -maxdepth 0 ! -name encoded -type d -print0 | xargs -0 rm -rf

這從目前目錄中的所有條目開始(以避免列出.),刪除名稱為 的任何內容encoded,並僅保留目錄;它使用 null 作為分隔符輸出結果,並將結果輸入xargs到 give to rm -rf。在執行此變體之前,請嘗試

find * -maxdepth 0 ! -name encoded -type d

查看輸出是否符合您的預期。

-prune不會忽略它的匹配,它會避免下降到它;所以在你的例子中,encoded仍然列出,然後被-name測試過濾。

引用自:https://unix.stackexchange.com/questions/196380