パターンに一致するファイル名を含むディレクトリ名を一覧表示するには?

パターンに一致するファイル名を含むディレクトリ名を一覧表示するには?

複数のサブディレクトリとファイルを含むディレクトリがある場合は、正規表現に一致するファイル名(直接または間接)を含むそのディレクトリの直接サブディレクトリ名を一覧X表示したいと思います。X^rf.*\.img$

OS Xでこれを達成するには?

ベストアンサー1

GNUを使用すると、find各ディレクトリをテストできます。

for i in "$dir"/*/
do
    test -n "$(find "$i" -type f -regex '.*/test[^/]*' -print -quit)" \
       && echo "$i"
done

その後、各ディレクトリはファイルの先頭を検索し、test見つかった場合はそのディレクトリを印刷します。

参考にするいくつかの点があります。

  1. ;で始まるサブディレクトリを無視します。これを考慮する必要がある場合は、Bash FAQを確認して.キャプチャせずに含める方法.を学びます..
  2. 私達はゲームがあればfind早くやめた。-quitこれにより、大規模ファイルシステムツリーで時間が節約されます。
  3. テストは-regex考慮されているフルパス名と一致するため、基本find名にのみ一致する場合は一致時に注意する必要があります/-filename.
  4. -iregex大文字と小文字を区別しない一致には、代替を使用できます-regex
  5. optionsを使用して正規表現構文を選択できます-regextype

質問の特定のパターンにワイルドカードを使用できるため、次のようになります。

for i in "$dir"/*/
do
    test -n "$(find "$i" -type f -name 'rf*.img' -print -quit)" && echo "$i"
done

おすすめ記事