私は現在、次のようにディレクトリを検索し、特定のファイルを含まないディレクトリを一覧表示する方法を知っています。
find parent_directory -mindepth 1 -maxdepth 1 -type d '!' -exec sh -c 'ls -1 "{}"|egrep -i -q "^file_name$"' \; -print
ただし、結果ディレクトリを使用して他のファイルが含まれていることを確認したいのですが、単一の拡張行式ではこれを実行できません。これは可能ですか?
ベストアンサー1
また、必要なディレクトリを決定することもできます。
find . -maxdepth 2 -path '*/*/wanted.txt' -type f \
-execdir test ! -f unwanted.txt \; -execdir pwd \;
仕組みは次のとおりです。
- 深さが2の項目を探します。
- 2つのスラッシュがあるため、この
-path
オプションは深さを2に制限します。最大深度は追加の進行を防ぎ、2つの明示的なスラッシュは深さが2未満を防止するためです。 - 深さレベル 2 で見つかった Wanted.txt エントリは、通常のファイルであることが望ましく、次のように保証されます。
-type f
- この
-execdir
オプションは、Wanted.txtがあるディレクトリにタスクを昇格させ、test
コマンドが望ましくないファイルを見つけます。 -execdir
次に、不要なファイルが見つからない(昇格したように)ディレクトリを印刷する簡単な問題です。- これについて詳しく説明しないで、ディレクトリには特定のファイルを1回しか含めることができないため、タスクは
-execdir
/ directoryで一度実行され、少なくとも通常のファイルWanted.txtを含むことが確実なディレクトリでのみ実行されます。