Find
如何正確排除查找中的目錄?
根據這個問題: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