특정 문자열의 디렉토리에있는 모든 .java 파일을 grep 및 모든 하위 디렉토리에서 모든 .java 파일에서

Mac OS X의 현재 디렉토리 및 모든 하위 디렉토리에서 모든 .java 파일에서 간단한 문자열 (정규식이 아님)을 어떻게 검색합니까? 일치하는 파일 및 디렉토리 이름 목록을 인쇄하고 싶습니다.



답변

그리고 항상 인기있는

find . -name '*.java' | xargs grep -l 'string'

편집 (프랭크 슈 체바) :

공백이있는 파일 이름 또는 디렉토리를 처리하는 경우 가장 안전한 방법은 다음과 같습니다.

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

항상 여러 가지 방법이 있습니다.


답변

전통적인 유닉스 대답은이 질문에 대해 받아 들인 것입니다.

find . -name '*.java' | xargs grep -l 'string'

이것은 아마도 Java 파일에서 작동하지만 파일 이름의 공백은 전통적인 UNIX 세계보다 Mac에서 훨씬 일반적입니다. 공백이있는 파일 이름이 위의 파이프 라인을 통과하면 xargs는 개별 단어를 다른 이름으로 해석합니다.

당신이 정말로 원하는 것은 경계를 명확하게 만들기 위해 이름을 분리하는 것입니다.

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

대안은 Mark가 제안한 것처럼 run grep을 찾도록하는 것입니다.하지만 많은 파일을 검색하는 경우에는 그 방법이 느려집니다 (전체 파일 목록에서 grep이 한 번이 아니라 한 파일 씩 한 번 호출 됨).


답변

그렙,보다 나은 grep을 사용하여 ACK를 :

ack -l --java  "string"

답변

원하는 경우 실제로 정규 표현식을 사용하고 메타 문자를 피하거나 이스케이프하면 문자열을 검색 할 수 있습니다.

find . -iname "*.java" -exec egrep -il "search string" {} \;

답변

grep -rl --include="*.java" simplestring *

답변

이것은 OSX 질문이므로 더 많은 OSX 관련 답변이 있습니다.

명령 행에서 건너 뛰어 find사용 Spotlight하십시오. 훨씬 더 강력합니다!

명령 줄 스포트라이트 – 그립 찾기

대부분의 사람들은 명령 줄에서 Spotlight 검색을 수행 할 수 있다는 것을 모릅니다. 모든 비전 찾기 및 grep 옵션을 기억해야하는 이유와 Spotlight가 작업을 수행하도록 할 수없는 이유는 무엇입니까? Spotlight에 대한 명령 행 인터페이스를 mdfind라고합니다. GUI Spotlight 검색과 동일한 기능을 갖추고 있으며 명령 줄에서 스크립트를 작성할 수 있습니다.


답변

이것을 줘 :

grep -rl "string" */*java