findコマンドを使用してディレクトリツリーを再帰的に検索し、指定された名前と一致するディレクトリのすべての結果を返します。
find . -type d -name '<NAME>'
ログファイルに印刷される返されたパスのリストを取得します。親ディレクトリにomit.txtというファイルを含む結果を無視できるようにしたいです。
./parent_directory/名前>
私はこれを持って努力してきました。
find . -type d -name '<NAME>' \( ! -wholename "*omit.txt*" -prune \)
ファイルを含む結果を無視するためにpruneコマンドを使用しようとしていますが、この方法はディレクトリにのみ適用されるようです。どんな助けでも大変感謝します。 1つのコマンドでこれを行い、出力ファイルをできるだけ維持したいと思います。
ベストアンサー1
find
作業中にディレクトリ内のファイルを表示できる必要があるため、内部でこれを正しく実行することはできないと思います。-prune
ディレクトリ自体は機能する必要がありますが、他の条件ではディレクトリ自体に置かれたファイル名のみが表示されます-path
。find
私が考えることができるのは、シェルを分離してディレクトリの内部を見るだけです。このような:
$ 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 bar
bar
成功は評価されないため、foo
ディレクトリがクリーンアップされると印刷は実行されません。-o -print
最後に追加すると、ディレクトリの内容も印刷できます。exec ... {} +
各ディレクトリの条件として個別に必要なため、ここでは使用できません。