2011-12-22 3 views
36

파일이 있습니다 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home유닉스에서 특정 확장자를 가진 모든 파일 찾기?

내 하드 드라이브에 * .jdk가 있는지 확인하려고합니다. 따라서 검색 명령을 수행합니다.

find . -name "*.jdk" 

하지만 아무 것도 찾지 못합니다. 내가 아는 사람조차도. 어째서?

답변

70

find .은 현재 디렉토리에서 찾습니다. 그

을 수행하여이 메시지는 다음 억제 할 수있는 권한이 거부의 톤을 얻는 경우

find/-type f -name "*.jdk" 

- 당신이 다른 디렉토리에있는 파일 (루트 액세스)를 찾을 수있는 권한이 경우에 당신은 당신의 파일을 찾을 수를 사용할 수 있습니다

find/-type f -name "*.jdk" 2> /dev/null 
+3

@Prostak, 이것은 디렉토리가 아닌 일반 파일 만 표시합니다. '-type f'는 심볼릭 링크, 디렉토리, 장치 등을 걸러내는 것입니다. – BRFennPocock

+0

나는 이것을 정답으로 표시했다. 하지만 두 분 모두 도와 주셔서 감사합니다! – Prostak

4

아마도 귀하의 JDK는 대문자이거나 OS X에서 사용 가능한 find 버전은 동작이 지정되지 않은 경우 기본값이 -print이 아닙니다. 시도 :

find . -iname "*.jdk" -print 

을 (-iname-name 비슷하지만, 대소 문자를 구별 일치를 수행, -print는 결과를 출력 할 find을 말한다)에서 언급 한 바와 같이 ---

--- 편집

을 @Jaypal, 분명히 find . ... 현재 디렉토리 (및 하위 디렉토리) 만보고 전체 드라이브를 검색하려면 /을 검색 경로로 지정해야합니다.

+1

사용해야하는 이유 '-print', ISN'

당신은 아마 이런 맥락에서 원하는 무엇

*와 같이 "탈출"할 수

find /System -name '*.jdk' 

입니다 ... 또는 기본값은 무엇입니까? –

+1

@giannischristofakis : 방금 POSIX 표준을 확인했습니다. 예, 기본값입니다. 아마 예전 GNU를 두려워서 명시 적으로 썼을 것입니다 (예를 들어, GNU에서는'.'을 생략 할 수 있지만 BSD의 IIRC는 필요하다는 것을 알기 때문에). –

2

'.' 현재 디렉토리가 사용 중입니다. 홈 디렉토리에서 시작한다면 아마도 JDK 파일이 누락 될 것입니다.

최악의 경우 검색을 사용하면 JDK 파일에 부모가해야 특정 몇 가지 경로로 '/'대체

find/-name '*.jdk' -o -name '*.JDK' -print 

그렇지 않으면 루트에서 시작하는 것입니다.

이 정보가 도움이되기를 바랍니다.

8

A/

find . 수단 "(현재 디렉토리부터) 찾을 수 있습니다." 전체 시스템을 검색하려면 find /을 사용하십시오. 그것은 와일드 카드 주위에 작은 따옴표를 사용하는 것이 더 안전 등

B/

, find /System/Library 사용 /System/Library에서 검색 할 수 있습니다. *라는 파일이없는 경우.당신이 그것을 실행할 때 현재 디렉토리junk.jdkfoo.jdk을 파일을 가지고, 그러나, 당신이 일어날 경우,

find . -name *.jdk 

: 작업 디렉토리에 JDK는이 프로그램을 실행할 때, 다음 find는의 명령 줄을 얻을 것이다 find 대신 시작됩니다 (두 있기 때문에)을 혼동하고, 밖으로 에러가 발생합니다

find . -name junk.jdk foo.jdk 

.... 당신이 다음 foo.jdk을 삭제하고 다시 똑같은 일을 할 경우 (예를 들어) 1.6.0.jdk라는 이름의 파일을 찾을 수 없을 것입니다

find . -name junk.jdk 

을 ...이 것입니다.

find /System -name \*.jdk 
관련 문제