디렉토리의 모든 파일을 grep하는 더 쉬운 방법이 있습니까?

디렉토리의 모든 파일을 grep하는 더 쉬운 방법이 있습니까?

내가 사용하는 전체 트리에서 무언가를 검색하고 싶을 때

find . -type f -print0 | xargs -0 grep <search_string>

성능이나 단순성 측면에서 이를 수행하는 더 좋은 방법이 있습니까?

답변1

grep옵션을 지원 하는지 확인하세요 -r(예:재귀):

grep -r <search_string> .

답변2

하위 디렉터리로 재귀적으로 이동하려면 다음을 수행하세요.

grep -R 'pattern' .

-R옵션은 표준은 아니지만 grep대부분의 일반적인 구현에서 지원됩니다.

답변3

find두 번째로 좋은 대답: 출력을 파이프로 연결하는 대신 다음을 실행할 수 있습니다.grep

find . -type f -exec grep 'research' {} '+'

짜잔, 두 개가 아닌 하나의 명령이군요!

설명하다:

find . -type f

에서 모든 일반 파일을 찾으세요.

-exec grep 'research'

grep '연구'

{}

찾은 파일 이름에

'+'

각 파일 이름에 대해 한 번 대신 모든 파일 이름에 대해 하나의 명령을 사용하십시오.

참고: ';'각 파일 이름은 한 번씩 나타납니다.

그 외에도 소스 코드 작업에 사용하는 경우 ack코드의 일부를 쉽게 찾을 수 있도록 설계된 코드를 볼 수 있습니다.

확인하다

편집하다:

이 연구를 조금 더 확장할 수 있습니다. 먼저 -name ''스위치를 사용하여 find지정된 이름 지정 패턴을 가진 파일을 찾을 수 있습니다.

예를 들어:

  • 로그에만 해당하는 파일:-name '*.log'

  • c 헤더가 있는 파일에만 해당하지만 파일 확장자는 대문자나 소문자를 고집할 수 없습니다.-iname *.c

참고: 및 와 grep마찬가지로 이 경우 스위치는 대소문자를 구분하지 않음을 의미합니다.ack-i

이 경우 grep은 색상과 줄 번호 없이 내용을 표시합니다.

--color-n스위치(각각 파일의 색상 및 줄 번호)를 사용하여 변경할 수 있습니다 .

결국 다음과 같은 것을 얻을 수 있습니다.

find . -name '*.log' -type f -exec grep --color -n 'pattern' {} '+'

예를 들어

$ find . -name '*.c' -type f -exec grep -n 'hello' {} '+' 
./test2/target.c:1:hello

답변4

많은 수의 파일로 작업하는 경우 하위 폴더의 모든 파일을 greping하는 대신 검색해야 하는 파일을 자르면 grep이 더 빠르게 실행됩니다.

저는 가끔 다음 형식을 사용합니다.

grep "primary" `find . | grep cpp$`

..txt로 끝나는 하위 폴더에서 모든 파일을 찾습니다 cpp. 그런 다음 "기본"을 찾기 위해 해당 파일을 grep하십시오.

필요한 경우 이러한 결과를 추가 grep 호출에 계속 전달할 수 있습니다.

grep "primary" `find . | grep cpp$` | grep -v "ignoreThis" | grep -i "caseInsensitiveGrep"

관련 정보