특정 폴더의 파일에만 Grep 사용

특정 폴더의 파일에만 Grep 사용

에 대해 grep하고 싶지만 interesting string특정 폴더/파일 조합에 대해서만 가능합니다 myfolder/myfile.out.

내가 파악하고 있는 디렉터리에는 서로 다른 깊이의 하위 디렉터리에 이러한 조합이 포함될 수 있습니다(그렇지 않으면 그냥 ). 또한 파악해야 하는 것처럼 다른 이름을 가진 디렉터리에 있는 항목 grep 'interesting string' myfolder/myfile.out에서 결과를 얻고 싶지 않습니다. 그렇지 않아 .myfile.out/deeply/nested/directory/structure/myfolder/myfile.out/deeply/nested/directory/structure/notmyfolder/myfile.out

답변1

내가 올바르게 이해했다면 다음과 같은 것을 찾고 있습니다.

find . -path "*/myfolder/myfile.out" -exec grep <string> /dev/null {} +

답변2

zsh에서는**/ 전반적인 상황"모든 수준의 디렉터리 중첩 아래"를 의미합니다.

grep 'interesting string' **/myfolder/myfile.out

Bash에서: shopt -s globstar그런 다음 위와 같이 수행합니다. Bash 4.2 이하에서는 디렉터리의 심볼릭 링크를 통과합니다. 이 기능은 OSX의 이전 버전 bash에는 아직 존재하지 않습니다.

ksh93에서는 set -G위와 같습니다.

파일 이름의 전체 길이가 너무 길면 실패할 수 있습니다. 이 경우 find일괄적으로 실행될 호출로 대체할 수 있습니다.grep

find -path '*/myfolder/myfile.out' -exec grep -H 'interesting string' {} +

또는 GNU 도구를 사용할 수 없는 경우:

find -name myfolder -exec sh -c 'grep "$0" /dev/null "$1/myfile.out"' 'interesting string' {} \;

하지만 zsh가 있으면 다시 저장됩니다.zargs:

zargs -- **/myfolder/myfile.out -- grep 'interesting string' /dev/null

또 다른 접근 방식은 GNU grep보다 더 이국적인 방식으로 grep과 디렉터리 탐색을 결합하는 다른 도구를 사용하는 것입니다. 예를 들어 다음을 사용할 수 있습니다.은을 찾는 사람:

ag -G '/myfolder/myfile\.out$' 'interesting string'

관련 정보