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

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

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



답변

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


답변

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

    shopt -s globstar

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

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

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


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


답변

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

답변

컴퓨터에 무언가를 설치할 수 있다면 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.


답변

이건 어때?

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

설명:

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

답변

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

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

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