次の方法を使用して、 'tmp'と 'logs'で始まるフォルダを除いて、 '/app/test'ディレクトリ内のすべてのファイルとフォルダを見つけたいと思います。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 ...
何か提案してもらえますか?
答え1
ファイル名ワイルドカードを含む単語を引用しないことに加えて、すべてのテストの意味を反転して、ファイル名-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
そのポイントに一致するエントリのパス名を印刷し続けます。
答え2
別の方法:
find /app/test -type d \( -path "*/log*" -o -path "*/tmp" \) -prune -o -print | tee /tmp/findall.log
使用時に-path
ディレクトリ名全体が一致する必要があるため、*
globパターンの前にあるワイルドカード文字を使用してください。
また"*/tmp"
、という名前のディレクトリへのパスのみが一致し、またはtmp
というディレクトリは一致しません。一方、で始まるディレクトリ名を含むすべてのパスと一致します。tmp2
tmporary
"*/log*"
log
-prune
find
括弧内に一致するすべてのディレクトリをスキップします。