Find

如何正確排除查找中的目錄?

  • February 3, 2022

根據這個問題:How to exclude dirs in find,命令應該是這樣的:

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print

但如果我這樣做

find . -type d \( -path "./.cpan" -o -path "./.mozilla" -o "./.cache" \) -prune -o -print

這給出了: find: paths must precede expression: ./.cache'

find: possible unquoted pattern after predicate -o'?

但我做了報價。

另外,在-path選項之後,路徑應該是絕對的還是相對的?因為我已經包含了目前目錄./[somefile],但它需要-path嗎?

您錯過了-path最後一個選項值前面的謂詞"./.cache"

使用的路徑-path必須以 使用的頂級搜尋路徑開頭find。例如

  • find . -path './something/here'
  • find /etc -path '/etc/init.d'

*如果要匹配目錄名稱而不指定其在文件系統樹中的位置,則可能需要使用萬用字元。此範例將匹配-type f目錄下某處的所有文件 ()wizard

  • find . -path '*/wizard/* -type f -print

當我搜尋資訊以使 find 命令排除多個目錄時,我來到了這個頁面。我覺得沃爾夫的回答最優雅。根據我的實驗,基於相同概念的變體是:

find . \( -path ./.cpan -o -path ./.mozilla -o -path ./.cache \) -not -prune -o -print

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