다음 명령을 실행하고 있지만 재귀 적으로 수행되지 않습니다.
find . -name *.java
현재 디렉토리 아래에 Java 파일이 있지만 현재 디렉토리에서만 find
를 수행하고 있습니다. OS X, 10.9를 사용하고 있습니다.
답변
문제는 매개 변수. 대신 다음을 수행하십시오.
find . -name "*.java"
설명
따옴표없이 쉘은 *.java
를 glob 패턴으로 해석하고 전달하기 전에 glob과 일치하는 모든 파일 이름으로 확장합니다. find
. 현재 디렉토리에 foo.java
가있는 경우 find
“의 실제 명령 줄은 다음과 같습니다.
find . -name foo.java
이것은 분명히 현재 디렉토리에있는 파일 만 나열합니다 (유사한 이름의 파일).
인용은 glob 확장을 방지하고 명령 줄을있는 그대로 find
에 전달합니다.
참고로, glob이 일치하지 않았습니다 (현재 디렉토리에 *.java
파일이 없습니다. tory), 일치하지 않는 glob을 처리하도록 셸을 설정 한 방법에 따라 두 가지 동작 중 하나가 발생합니다 (예 : Bash의 nullglob
옵션에 의해 관리 됨). ) :
- 일치하지 않는 glob이 셸에 의해 확장되지 않으면
find
가 올바른 동작을 나타냅니다. - 일치하지 않는 glob이 쉘에 의해 빈 문자열로 확장되는 경우
find
는-name
.
답변
-이름 값을 따옴표로 묶었지만 여전히 내가 원하는 모든 찾기 히트를 얻지 못했습니다. 나는 그것이 심볼릭 링크 때문이라고 추측했고 그것이 사실이라고 확신했습니다. symlink를 통해 검색하도록 강제로 찾으려면 명령을 다음과 같이 수정할 수 있습니다.
find -L . -name "*.java"
설명
답변
*
find . -name \*.java
-follow
는 다른 매개 변수 앞에 넣으면-L
의 더 읽기 쉬운 동의어입니다.