에 대해 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'