답변:
find . foo*
는이 foo*
확장 한 다음 찾기를 위해 전달 될 것입니다.
" "
재귀 검색에 매우 필요한 스트레스 .
find . -name "foo*" 2>/dev/null
grep으로 찾는 배관이 더 편리합니다. 임의의 와일드 카드 일치를 위해 정규식의 모든 기능을 제공합니다.
예를 들어 파일 이름에서 대소 문자를 구분하지 않는 문자열 "foo"가있는 모든 파일을 찾으려면 다음을 수행하십시오.
~$ find . -print | grep -i foo
find
또한, 보유 -iname
, -regex
그리고 -iregex
그렇게하기 위해 대소 문자 구별 와일드, 정규식, 및 대소 문자 구별 정규식 매칭 플래그 배관 것은 grep
불필요하다.
find
이러한 옵션을 지원 하는 명령이 제공되는 것은 아니라는 사실을 알 수 있습니다. 때로는 grep
유일한 옵션이됩니다.
find
패턴과 일치하는 모든 파일을 찾습니다.
find . -name "*foo"
그러나 사진을 원한다면 :
tree -P "*foo"
도움이 되었기를 바랍니다!
brew install tree
apt-get
설치되지 않은 Mac OSX 사용자의 경우
find -L . -name "foo*"
몇 가지 경우에는 기호 디렉토리 링크를 처리하기 위해 -L 매개 변수가 필요했습니다. 기본적으로 심볼릭 링크는 무시됩니다. 이 경우 디렉토리를 하위 디렉토리로 변경하고 패턴과 일치하는 파일을 보지만 파일 이름을 반환하지 않으므로 상당히 혼란 스러웠습니다. -L을 사용하면 해당 문제가 해결됩니다. 찾기에 대한 기호 링크 옵션은 -P -L -H입니다.
쉘 이 새로운 글 로빙 옵션을 지원 하는 경우 (으로 활성화 할 수 있음 shopt -s globstar
) 다음을 사용할 수 있습니다.
echo **/*foo*
파일이나 폴더를 재귀 적으로 찾을 수 있습니다. 이것은 Bash 4, zsh 및 유사한 쉘에서 지원됩니다.
개인적 으로이 쉘 함수를 정의했습니다.
f() { find . -name "*$1*"; }
참고 : 위의 행은 쉘에 직접 붙여 넣거나 사용자 ~/.bashrc
파일에 추가 할 수 있습니다.
그런 다음 다음을 입력하여 파일을 찾을 수 있습니다.
f some_name
또는 간단한 구문 으로 fd
유틸리티 를 사용할 수 있습니다 ( 예 :) fd pattern
.
shopt -s globstar
명령으로 확장 globbing을 활성화해야하기 때문 입니다. 이것은 Bash, zsh 및 유사한 쉘에서 지원됩니다.
bash-3.2$ shopt -s globstar
제공bash: shopt: globstar: invalid shell option name
asciicast2vector
사용할 수 있습니다.
재귀 파일을 검색하는 기본 방법이며 대부분의 경우에 사용 가능합니다.
find . -name "filepattern"
현재 디렉토리 내에서 파일 이름 또는 패턴에 대한 재귀 순회를 시작합니다. find 명령을 사용하면 와일드 카드 및 다양한 스위치를 사용하여 옵션의 전체 목록을 볼 수 있습니다.
man find
또는 시스템에서 매뉴얼 페이지를 사용할 수없는 경우
find --help
그러나 전체 파일 시스템을 통과하고 파일을 인덱싱하는 더 현대적이고 빠른 도구가 있습니다. 이러한 일반적인 도구 중 하나는 찾거나 이동 / 이동합니다. 설치 방법에 대한 OS 설명서를 확인해야합니다. 설치 스크립트가 데이터베이스를 시작하지 않으면 데이터베이스를 시작해야하며 입력하여 수동으로 수행 할 수 있습니다
sudo updatedb
특정 파일 형식을 찾는 데 사용하려면
locate filename
또는 현재 디렉토리에서 파일 이름이나 패턴을 찾으려면 다음을 입력하십시오.
pwd | xargs -n 1 -I {} locate "filepattern"
파일 데이터베이스를 살펴보고 입력 한 패턴과 일치하는 경로 이름을 빠르게 인쇄합니다. 찾기 옵션의 전체 목록을 보려면 다음을 입력하십시오.
locate --help
또는man locate
또한 cron 작업을 통해 예약 된 시간에 데이터베이스를 업데이트하도록 locate를 구성 할 수 있으므로 오전 1시에 db를 업데이트하는 샘플 cron은 다음과 같습니다.
0 1 * * * updatedb
업데이트 된 b는 전체 파일 시스템을 통과하기 위해 루트 권한이 필요하므로 이러한 cron 작업은 루트별로 구성해야합니다.
우리가 재귀 적으로 갈 때 locate가 많이 사용되지 않는다는 것이 놀랍습니다.
먼저 "$ PWD"를 찾아 관심있는 현재 폴더에있는 파일 목록을 가져온 다음 원하는대로 greps를 실행합니다.
locate "$PWD" | grep -P <pattern>
물론 이것은 updatedb가 수행되고 인덱스가 주기적으로 업데이트된다고 가정합니다. 이것은 찾기를 실행하고 트리 아래로 내려가는 것보다 파일을 찾는 가장 빠른 방법입니다. 완전성을 위해 이것을 언급하십시오. 나무가 너무 무겁지 않으면 find를 사용하는 것에 대해 아무것도 없습니다.
locate "$PWD*.mp4"
grep
아래 명령은 모든 파일을 검색하는 데 도움이됩니다.
1) 대소 문자에 관계없이
2) 결과 권한이없는 폴더 제외
3) 루트 또는 원하는 경로에서 검색. 원하는 경로로 변경하십시오.
구문 :
find -iname ''2> & 1 | grep -v "권한 거부"
예
찾기 / -iname 'C * .xml'2> & 1 | grep -v "권한이 거부되었습니다"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null