디렉토리 아래에 특정 확장자를 가진 파일을 가져옵니다.


11

특정 확장자를 가진 디렉토리 아래의 파일에서 키워드를 검색 할 수있는 명령이 있습니까?

문자열 grep -irn "string" ./path은 디렉토리 아래의 모든 파일을 재귀 적으로 검색합니다 ./path. 내 특정 요구 사항은 다음 ./path과 같은 확장자 로 모든 파일을 검색 하는 것입니다.*.h

답변:


11

몇 번의 시련 후 grep -irn 'string' --include '*.h'더 편리 하다고 생각 합니다


1
그렇게하려면 "*.h"인용 부호 를 넣어야 합니다.
G-남자

그것은 인용 부호와 함께 또는 인용없이 작동
Ginu Jacob

3
이제 그렇습니다. foobar.h현재 디렉토리에서 호출 된 파일을 작성하고 다시 시도하십시오.
G-Man

10

S의 등 (켜)를 SH옵트 이온 globstar명령으로

    shopt -s globstar

이것은 **파일 이름 구성 요소로 여기와 아래의 모든 것을 의미합니다. 따라서 디렉토리 와 하위 디렉토리의 path/**모든 것을 의미 합니다. ( 여기 에 입력 할 필요가 없습니다 .) 그런 다음path./

grep -in "string" path/**/*.h

.h및 아래의 모든 파일 을 검색합니다 path.


당신은 할 수 있습니다 와 옵션을 NSET shopt -u.


5
find /path -iname "*.h" -exec grep -inH "string" "{}" \;

1
-exec... +좋다.
G-Man

1
방금 알았습니다 "string". 답변 에 포함 하는 것을 잊었습니다 !
G-Man

3

컴퓨터에 무언가를 설치할 수 있다면 ack을 사용하는 것이 좋습니다 .

필요한 것 이상을 정확하게 수행 할 수 있습니다. 사용 사례의 경우 다음을 수행 할 수 있습니다.

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hhh 파일을 필터링 합니다.
  • - 이 경우를 무시

기본적으로 지원되는 파일 필터를 찾으려면 명령을 실행하십시오 ack --help=type.


ack의 이전 복제 본인 ag 도 있습니다 . 이전에는 기능 세트가 다소 차이가 나기 때문입니다.
8bittree

나는 몰랐다. 공유해 주셔서 감사합니다.
AD

3

이건 어때?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

설명:

  • -L : 심볼릭 링크 따르기
  • -name : 별표를 사용하여 확장명을 설명 할 수 있습니다
  • -in : 제안과 동일하지만 'r'은 find명령으로 대체됩니다.
  • {} : 이것은 find명령 의 결과를 나타냅니다
  • \; : find와 결합 하는 경우 -exec명령 끝 지정자입니다.

1
어떻게 "*.h"작동합니까? 나는 그것이 필요하다고 생각했을 것입니다'*.h'
Joe

나는 항상 큰 따옴표로 작업하지만 차이가 있다고 생각하지 않습니다.
Dominique

0

gnu grep을 사용하는 경우 원하는 것을 정확하게 수행하는 플래그가 있습니다.

grep -irn --include=\*.h "string" path

다른 greps에서는 사용할 수 없다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.