Grep コンテンツを再帰的に、1 つのディレクトリ深度のみ印刷

Grep コンテンツを再帰的に、1 つのディレクトリ深度のみ印刷

ファイルの内容内のサブディレクトリを再帰的に検索したいのですが、最初のレベルのサブディレクトリに一致するものがありますが、気にしています。つまり、次のように与えられます。

ParentDirectory
    Subdirectory1
        File containing match
        File not containing match
        File containing match
    Subdirectory2
        File not containing match
        File not containing match
    Subdirectory3
        File not containing match
        Subdirectory3.1
            File containing match

私が知る必要があります:

Matches:
ParentDirectory/Subdirectory1
ParentDirectory/Subdirectory3

誰かがgrepまたは同様のユーティリティを使用してこれを行う方法を提供できますか?

答え1

各サブディレクトリでfind再帰を実行するには、次の手順を実行します。grep

echo "Matches:"
find ParentDirectory -mindepth 1 -maxdepth 1 -type d \
  -exec grep -rq pattern {} \; \
  -and -print

-qgrep最初の一致時に停止オプションは、項目が見つかっ
-and -printた場合にのみ目次を印刷しますfindgrep


-loopを使用するfor代替:

echo "Matches:"
for d in ParentDirectory/* ; do
    [ -d "$d" ] && grep -rq pattern "$d" && echo "$d"
done

両方のバージョンの出力:

Matches:
ParentDirectory/Subdirectory1
ParentDirectory/Subdirectory3

関連情報