( find
여기서 GNU를 가정 합니다)
그냥 사용
find filename
것입니다 그냥 반환하기 때문에, 빨리 filename
, 또는 내부의 이름 filename
그 이름이 현재 디렉토리에 존재하지 않는 경우는 디렉토리 또는 오류의 경우. 디렉토리 와 비슷 ls filename
하지만 재귀적인 매우 빠른 작업 filename
입니다.
대조적으로
find | grep filename
허용 할 find
목록을 생성하는 모든 아래의 현재 디렉토리에서 이름, grep
다음 필터링 것입니다. 이것은 분명히 훨씬 느린 작동입니다.
나는 실제로 의도 된 것이
find . -type f -name 'filename'
filename
현재 디렉토리 나 그 아래에있는 일반 파일의 이름을 찾습니다 .
이것은 빨리 (또는 비교적 빠른)로 될 것입니다 find | grep filename
,하지만 grep
해결책은 일치합니다 filename
유사 무엇을, 발견 된 각 이름의 전체 경로에 -path '*filename*'
함께 할 것입니다 find
.
혼란은 어떻게 find
작동 하는지에 대한 오해에서 비롯됩니다 .
이 유틸리티는 여러 경로 를 사용하여이 경로 아래의 모든 이름을 반환합니다.
그런 다음 파일 이름, 경로, 타임 스탬프, 파일 크기, 파일 형식 등에 영향을 줄 수있는 다양한 테스트를 사용하여 반환 된 이름 을 제한 할 수 있습니다 .
네가 얘기 할 때
find a b c
당신은 질문 find
세 가지 경로에서 사용할 수있는 모든 이름을 나열 a
, b
그리고 c
. 이것이 현재 디렉토리에있는 일반 파일의 이름 인 경우, 해당 파일이 리턴됩니다. 이들 중 하나가 디렉토리 이름 인 경우 해당 디렉토리 내의 모든 추가 이름과 함께 리턴됩니다.
내가 할 때
find . -type f -name 'filename'
현재 디렉토리 ( .
)와 그 아래 에있는 모든 이름 목록이 생성 됩니다. 그런 다음을 사용하여 이름을 일반 파일 (예 : 디렉토리 등)의 이름으로 제한합니다 -type f
. 그런 다음를 filename
사용하여 일치 하는 이름에는 추가 제한이 있습니다 -name 'filename'
. 문자열 filename
은 파일 이름 글 로빙 패턴 일 수 있습니다 *.txt
( 예 : 그냥 인용하십시오!).
예:
다음은 .profile
내 홈 디렉토리에서 호출 된 파일을 "찾는"것 같습니다 .
$ pwd
/home/kk
$ find .profile
.profile
그러나 실제로는 경로의 모든 이름 만 반환합니다 (이름 .profile
은 하나 뿐이며이 파일의 이름 만 있음).
그런 다음 cd
한 단계 위로 올라간 후 다시 시도하십시오.
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
이 find
명령은 이제라는 경로를 찾을 수 없습니다 .profile
.
그러나 현재 디렉토리를보고 반환 된 이름만으로 제한하면.profile
거기에서도 찾을 수 있습니다.
$ pwd
/home
$ find . -name '.profile'
./kk/.profile