Find

如何從查找搜尋中排除與萬用字元匹配的多個文件夾

  • May 16, 2020

我希望在“/app/test”目錄下找到所有文件和文件夾,除了/排除以“tmp”和“logs”開頭的文件夾prune

因此我嘗試了以下命令。

find /app/test -type d \( ! -name logs* \)  -o \( ! -name log \)  -o \( ! -name tmp* \)  -o
\( ! -name tmp \) -prune | tee /tmp/findall.log

但我看到查找結果中包含的頂級文件夾如下所示:

/app/test/Admin/tmp/data/pm.trp
/app/test/Admin/tmp/wond/iqc.log
etc ...

你能建議嗎?

除了不引用包含文件名通配字元的單詞之外,您還顛倒了所有-name測試的含義,從而從搜尋樹中刪除了與這些名稱和模式不匹配的名稱。

反而:

find /app/test -type d \
   \( -name 'logs*' -o -name log -o -name 'tmp*' -o -name tmp \) -prune -o \
   -print | tee /tmp/findall.log

如果沒有 ,該-prune測試-print仍會列印出與該點匹配的事物的路徑名。

另一種方法:

find /app/test -type d \( -path "*/log*" -o -path "*/tmp" \) -prune -o -print | tee /tmp/findall.log

請注意,使用-path完整目錄名稱時正在匹配;因此在 glob 模式中使用了前*萬用字元。

另請注意,"*/tmp"僅匹配名稱為 exact 的目錄的路徑tmp,而不是名稱為tmp2ortmporary的目錄;while"*/log*"將匹配任何路徑,包括以 . 開頭的目錄名稱log

-prune``find跳過括號內匹配的所有目錄。

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