다음 명령을 실행하고 있지만 재귀 적으로 수행되지 않습니다.

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 옵션에 의해 관리 됨). ) :

  1. 일치하지 않는 glob이 셸에 의해 확장되지 않으면 find가 올바른 동작을 나타냅니다.
  2. 일치하지 않는 glob이 쉘에 의해 빈 문자열로 확장되는 경우 find-name.

답변

-이름 값을 따옴표로 묶었지만 여전히 내가 원하는 모든 찾기 히트를 얻지 못했습니다. 나는 그것이 심볼릭 링크 때문이라고 추측했고 그것이 사실이라고 확신했습니다. symlink를 통해 검색하도록 강제로 찾으려면 명령을 다음과 같이 수정할 수 있습니다.

find -L . -name "*.java" 

설명

  • 심볼 링크도 제 문제였습니다. -follow는 다른 매개 변수 앞에 넣으면 -L의 더 읽기 쉬운 동의어입니다.
  • 좋습니다. ! 감사합니다 !! +1!

답변

*

find . -name \*.java 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다