Find
如何從查找搜尋中排除與萬用字元匹配的多個文件夾
我希望在“/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
測試
另一種方法:
find /app/test -type d \( -path "*/log*" -o -path "*/tmp" \) -prune -o -print | tee /tmp/findall.log
請注意,使用
-path
完整目錄名稱時正在匹配;因此在 glob 模式中使用了前*
萬用字元。另請注意,
"*/tmp"
僅匹配名稱為 exact 的目錄的路徑tmp
,而不是名稱為tmp2
ortmporary
的目錄;while"*/log*"
將匹配任何路徑,包括以 . 開頭的目錄名稱log
。
-prune``find
跳過括號內匹配的所有目錄。