재귀 grep을 많이 사용하여 특정 내용의 소스 파일을 찾습니다.
grep -Rni "myfunc" .
큰 코드베이스에서는 이것이 느려질 수 있으므로 –incldue를 사용하여 확장을 제한 / 허용합니다.
grep -Rni --include=*.java "myfunc" .
그러나 전체 하위 디렉토리를 제외 (제거)하는 것이 더 효율적이라고 생각합니다.
grep -Rni --exclude=/.svn/ "myfunc" .
그러나 –exclude는 * .java와 같은 파일 패턴 만 지원합니다. 디렉토리를 제외하려면 어떻게해야합니까?
답변
답변
grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data
출처 :
https://stackoverflow.com/questions/2799246/grep-clude-a-specific-folder-using
답변
대신 find를 사용할 수 있습니다.
find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print
좋아, 그래서 조금 뒤로, grep 결과를 먼저 얻은 다음 경로 를 얻습니다 . 어쩌면 다른 누군가가 더 나은 대답을 가지고 있습니까?
답변
여기 내 프로젝트 중 하나의 스크립트에서 도움이 될만한 전체 예제가 있습니다.이 파일을 “all_source”(실행 파일로 표시)라고 부르고 프로젝트의 루트 디렉토리에 넣은 다음 grep myfunc $(./all_source)
스크립트의 끝에서 정렬 하는 것처럼 완전히 호출합니다. 선택 과목.
#!/bin/bash
find . \
-type d \( \
-wholename './lib' -o \
-wholename './vc6' -o \
-name 'gen' -o \
-name '.svn' \
\) -prune -o \
-type f \( \
-name '*.h' -o \
-name '*.cpp' -o \
-name '*.c' -o \
-name '*.lua' -o \
-name '*.*awk' \) -print \
| sort
이 스크립트는 프로젝트 일치하는 모든 파일 이름을 반환 *.h, *.cpp, *.c, *.lua, *.*awk
하지만, 모든을 .svn라는 이름의 폴더와 세대 폴더에서 검색뿐만 아니라에 대한 폴더를 건너 뛰는하지 않습니다 ./lib
및 ./vc6
(만 사람 바로 프로젝트 루트 오프). 그래서 당신이 grep myfunc $(./all_source)
그것을 할 때 그 파일들만 잡습니다. 프로젝트의 루트 디렉토리에서도 이것을 호출해야합니다.
답변
찾을 수있는 -prune 옵션도 있습니다 :
find . -path "*/.svn*" -prune -o -not -type d -exec grep -ni "myfunc" {} \; -print
답변
당신은 이것을 시도 할 수 있습니다 :
grep -R "myfunc" . | grep -v path_to_exclude/
예 : 로그 파일에서 컨텐츠를 검색하지 않으려면 다음을 수행하십시오.
grep -R "myfunc" . | grep -v log/