Mac OS X의 현재 디렉토리 및 모든 하위 디렉토리에서 모든 .java 파일에서 간단한 문자열 (정규식이 아님)을 어떻게 검색합니까? 일치하는 파일 및 디렉토리 이름 목록을 인쇄하고 싶습니다.
Mac OS X의 현재 디렉토리 및 모든 하위 디렉토리에서 모든 .java 파일에서 간단한 문자열 (정규식이 아님)을 어떻게 검색합니까? 일치하는 파일 및 디렉토리 이름 목록을 인쇄하고 싶습니다.
답변:
그리고 항상 인기있는
find . -name '*.java' | xargs grep -l 'string'
편집 (프랭크 슈 체바) :
공백이있는 파일 이름 또는 디렉토리를 처리하는 경우 가장 안전한 방법은 다음과 같습니다.
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
항상 여러 가지 방법이 있습니다.
mdfind
이 작업을 수행하는 더 OSXy 방법입니다 !
전통적인 유닉스 대답은이 질문에 대해 받아 들인 것입니다.
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"
grep -rl --include="*.java" simplestring *
명령 행에서 건너 뛰어 find
사용 Spotlight
하십시오. 훨씬 더 강력합니다!
대부분의 사람들은 명령 줄에서 Spotlight 검색을 수행 할 수 있다는 것을 모릅니다. 모든 비전 찾기 및 grep 옵션을 기억해야하는 이유와 Spotlight가 작업을 수행하도록 할 수없는 이유는 무엇입니까? Spotlight에 대한 명령 행 인터페이스를 mdfind라고합니다. GUI Spotlight 검색과 동일한 기능을 갖추고 있으며 명령 줄에서 스크립트를 작성할 수 있습니다.
이것을 줘 :
grep -rl "string" */*java
TextWrangler 와 같은 GUI 프로그램을 사용 하여 옵션이 인터페이스에있는 곳에서보다 직관적 인 검색을 수행 할 수도 있습니다 .
grep "(your string)" -rl $(find ./ -name "*.java")
대소 문자를 무시하려면 -rl을 -irl로 바꾸십시오. (문자열)은 필요할 때 정규 표현식이 될 수도 있습니다.