find
このコマンドを使用して特定のファイルが含まれていないディレクトリを見つけるにはどうすればよいですか?たとえば、リビジョン管理を受ける必要があるディレクトリが複数ある場合は、サブディレクトリがないディレクトリを検索して検索できますか.git
?または、プロジェクト内のすべてのモジュールにutilities.py
ファイルが必要であることを指定します。必要なファイルがまだないサブディレクトリをどのように検索できますか?
答え1
これ解決策あなたに役立つことができるのは、
find . -type d '!' -exec test -e "{}/utilities.py" ';' -print
テスト
- 私は名前の付いた4つのサブディレクトリを作成しました。ディレクトリ1、ディレクトリ2、目次3そして 空白のあるディレクトリ。これがスペースを同じようにうまく処理するかどうかをテストしたかったので、名前にスペースがあるディレクトリを作成しました。
- ファイルを作成しました。ファイル1、ファイル2、ファイル3そしてファイル4存在するディレクトリ2 そして目次3。
- 存在するディレクトリ1、私が作るファイル1、ファイル2、ファイル3。
- 存在する空白のあるディレクトリ、私は次のファイルを作成しました。空白のあるファイル。
ここで find コマンドを実行します。
find . -type d '!' -exec test -e "{}/file with spaces" ';' -print
私が得た結果は次のとおりです。
. ./dir1 ./dir2 ./dir3
予想通り、ディレクトリの後空白のあるディレクトリというファイルが含まれています。空白のあるファイル出力にはリストされません。
find
コマンドを次に変更するとファイル4その結果、私が得た結果は次のとおりです。. ./dir with spaces ./dir1
編集する
ただし、最終レベルにサブディレクトリとファイルがネストされている場合、上記の方法は機能しないようです。したがって、この状況を克服するために、結果を議論のようなものに変更することができます。ここ。
find . -type f -not -name 'utilities.py' -exec dirname {} \; | sort -u
Gilesが彼の本で提案したようにコメント、
.git
親ディレクトリを含むディレクトリをスキップすると便利です.git
。正しい場所に-pruneを追加するだけです。find . -type d -exec test -e "{}/.git" ';' -prune -o -print