ファイルのないディレクトリを探す

ファイルのないディレクトリを探す

findこのコマンドを使用して特定のファイルが含まれていないディレクトリを見つけるにはどうすればよいですか?たとえば、リビジョン管理を受ける必要があるディレクトリが複数ある場合は、サブディレクトリがないディレクトリを検索して検索できますか.git?または、プロジェクト内のすべてのモジュールにutilities.pyファイルが必要であることを指定します。必要なファイルがまだないサブディレクトリをどのように検索できますか?

答え1

これ解決策あなたに役立つことができるのは、

find . -type d '!' -exec test -e "{}/utilities.py" ';' -print

テスト

  1. 私は名前の付いた4つのサブディレクトリを作成しました。ディレクトリ1ディレクトリ2目次3そして 空白のあるディレクトリ。これがスペースを同じようにうまく処理するかどうかをテストしたかったので、名前にスペースがあるディレクトリを作成しました。
  2. ファイルを作成しました。ファイル1ファイル2ファイル3そしてファイル4存在するディレクトリ2 そして目次3
  3. 存在するディレクトリ1、私が作るファイル1ファイル2ファイル3
  4. 存在する空白のあるディレクトリ、私は次のファイルを作成しました。空白のあるファイル
  5. ここで find コマンドを実行します。

    find . -type d '!' -exec test -e "{}/file with spaces" ';' -print
    
  6. 私が得た結果は次のとおりです。

    .
    ./dir1
    ./dir2
    ./dir3
    
  7. 予想通り、ディレクトリの後空白のあるディレクトリというファイルが含まれています。空白のあるファイル出力にはリストされません。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

関連情報