親ディレクトリに特定のファイルが含まれている場合に検索結果からディレクトリを除外する方法

親ディレクトリに特定のファイルが含まれている場合に検索結果からディレクトリを除外する方法

findコマンドを使用してディレクトリツリーを再帰的に検索し、指定された名前と一致するディレクトリのすべての結果を返します。

find . -type d -name '<NAME>'

ログファイルに印刷される返されたパスのリストを取得します。親ディレクトリにomit.txtというファイルを含む結果を無視できるようにしたいです。

./parent_directory/名前>

私はこれを持って努力してきました。

find . -type d -name '<NAME>' \( ! -wholename "*omit.txt*" -prune \)

ファイルを含む結果を無視するためにpruneコマンドを使用しようとしていますが、この方法はディレクトリにのみ適用されるようです。どんな助けでも大変感謝します。 1つのコマンドでこれを行い、出力ファイルをできるだけ維持したいと思います。

ベストアンサー1

find作業中にディレクトリ内のファイルを表示できる必要があるため、内部でこれを正しく実行することはできないと思います。-pruneディレクトリ自体は機能する必要がありますが、他の条件ではディレクトリ自体に置かれたファイル名のみが表示されます-pathfind

私が考えることができるのは、シェルを分離してディレクトリの内部を見るだけです。このような:

$ mkdir -p x y/z ; touch x/foo y/omit.txt
$ find -type d \( -exec sh -c '[ -e "$1/omit.txt" ]' sh {} \; -prune -o -print \)
.
./x

foo -o barbar成功は評価されないため、fooディレクトリがクリーンアップされると印刷は実行されません。-o -print最後に追加すると、ディレクトリの内容も印刷できます。exec ... {} +各ディレクトリの条件として個別に必要なため、ここでは使用できません。

おすすめ記事