특정 확장자를 가진 디렉토리 아래의 파일에서 키워드를 검색 할 수있는 명령이 있습니까?
문자열 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
- –hh 는 h 파일을 필터링 합니다.
- – 이 경우를 무시
기본적으로 지원되는 파일 필터를 찾으려면 명령을 실행하십시오 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에서는 사용할 수 없다고 생각합니다.