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항목이 발견된 경우에만 목차를 인쇄합니다 find.grep


-loop를 사용하는 for대안 :

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

두 버전 모두에 대한 출력:

Matches:
ParentDirectory/Subdirectory1
ParentDirectory/Subdirectory3

관련 정보