파일 이름 패턴을 지정하는 재귀 Grep

파일 이름 패턴을 지정하는 재귀 Grep

재귀적으로 검색하고 지정된 파일 패턴을 사용할 수 있습니까?

나는 동등한 일을하려고 노력하고 있습니다.

find ./ -name "*.[c|h]" -exec grep -Hn PATTERN {} \;

분명히 grep의 -r 플래그를 사용할 수 있지만 파일 이름 패턴을 지정할 때는 다음과 같습니다.

grep -Hn -r PATTERN *.c

재귀적으로가 아닌 현재 디렉터리에서 *.c 파일만 찾습니다.

이것을 찾았지만 파일 이름 지정에 대해서는 언급하지 않습니다.재귀 grep과 find / -type f -exec grep {} \; 중 어느 것이 더 효율적이고 빠르나요?

답변1

적어도 최신 버전의 GNU에서는 인수에 grepglob 패턴을 사용할 수 있습니다.--include

grep -Hrn --include="*.[ch]" PATTERN .

.[GNU grep > 2.11에서는 를 사용할 때 명시적인 시작 디렉터리를 생략할 수 있습니다 -r.]

답변2

실행하기 전에도 *.c쉘에 의해 확장됩니다 . grep적절하게 멋진 쉘(예: zsh또는 컬렉션 bash포함 globstar)을 사용하면 다음과 같은 것을 통해 재귀적으로 사전 확장할 수 있습니다.

grep bla **/*.[ch]

그러나 이것은 쉘 솔루션입니다. 다른 해결책은 이러한 도구에서 파일 감지 지원을 살펴보는 것입니다.은을 찾는 사람,코드 검색,립그렙.

관련 정보