답변:
bat어디서나 파일 찾기내부 /path/to/folder에 이름이 포함 된 모든 파일을 찾으려면 bat다음을 사용할 수 있습니다.
find /path/to/folder -name '*bat*'
나는 한 인용 검색 패턴을 *bat*따옴표 생략하고 파일이 일치한다면, 때문에 *bat*현재 디렉토리, 쉘이 확대 될 *bat*그들의리스트로하고 통과 그 에게 find. 그렇다면 find제대로 작동하지 않습니다. ( \*bat\*그리고 "*bat*"작동합니다.)
현재있는 폴더 (예 : cded 폴더)를 검색하려면 .평소와 같이을 사용하십시오.
find . -name '*bat*'
전체 컴퓨터를 검색하려면을 사용하십시오/ . 홈 디렉토리를 검색하려면을 사용 ~하거나 홈 디렉토리 의 전체 이름을 사용하십시오. ( 쉘은 확장~ 홈 디렉토리의 완전한 경로에.)
당신이 파일을 포함하므로, 대문자와 소문자를 구별하지 않고로 검색 할 경우 BAT, bAt일치하는 등, 그리고, 사용 -iname대신의 시험 -name테스트를 :
find /path/to/folder -iname '*bat*'
모든 파일이로 끝나는 것을 발견했습니다 .c. 그런 파일 만 찾으려면 다음을 사용하십시오.
find /path/to/folder -name '*bat*.c'
모든 파일 이름이 접미사 bat앞 부분의 맨 처음 또는 끝에 .c있습니다. 과 같은 파일이 일치하지 않게하려면 embattled.c다음을 사용할 수 있습니다.
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o는 IS 또는 오퍼레이터.
폴더, 기호 링크 및 특수 장치 노드가 아닌 일반 파일 만 찾으려면 을 사용할 수 있습니다 -type f. 이것은 종종 권장되고 때로는 적절하지만 ... 특히 출력을 직접 검사하기 위해 실행하는 경우에는 실제로 원하는 것이 아닙니다find . 검색어와 일치 하는 심볼릭 링크 가 있다면 알고 싶지 않습니까?
일반 파일과 심볼릭 링크를 모두 찾으려면 다음을 사용할 수 있습니다.
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
이것은 -o연산자와 그룹화를 위해 괄호를 사용합니다 (쉘은 특수하게 처리하지 않도록 인용해야합니다. 그렇지 않으면 구문 오류가 발생합니다).
그러나 최종 파일을 가리키는 심볼릭 링크 만보고 싶다고 가정합니다 (디렉토리, 장치 노드 등에 대한 심볼릭 링크는 아님). 실제로 더 간단합니다. -xtype대신 사용하십시오 -type. 실행하지 않는 제공 find과 함께 -L, 플래그 -xtype심볼릭 링크하는 것은 링크 포인트에 파일의 유형을 테스트합니다.
find /path/to/folder -name '*bat*' -xtype f
파일에 대한 다른 심볼릭 링크에 대한 심볼릭 링크가 있으면 직접 대상이 일반 파일이 아닌 다른 심볼릭 링크 인 -xtype f경우에도 해당 파일 과 일치 합니다. 이것은 거의 항상 당신이 원하는 것입니다.
종종 사람들은 그들이 원한다고 생각 -type f하지만 실제로는 원합니다 -xtype f.
find하나를 지정하지 않으면 기본 조치는 -print입니다. 위에 주어진 모든 명령 -print은 끝에 붙인 상태와 동일합니다 .
find발견 된 파일을 기반으로 명령을 실행하는 데 종종 사용되며 종종 변경을 수행하는 명령입니다. 그러나 이외에도 결과를 표시하기위한 다른 작업도 -print있습니다. 특히 관심입니다 -ls:
find /path/to/folder -name '*bat*' -ls
이를 통해 각 파일에 대한 자세한 정보를 여러 열 형식으로 표시 할 수 있습니다 .ls file
find파일을 찾는 방법과 다른 방법 에 대한 자세한 내용 은 다음을 참조하십시오.
find온라인 또는 man find터미널에서 실행 하여 액세스 할 수 있는 매뉴얼 페이지 .find, locate및 xargs유틸리티.-xtype조언; 아마도 ls *bat*그리고 -maxdepth/ mindepth또한 언급 할 가치가 있습니다.
ls이미 다뤄 졌 듯이 find여기 에서 재귀 사건에 집중했습니다 . 물론, 상세한 대답은 몇 가지 패턴과 일치하는 파일 이름의 -recursive 목록을 비를 덮고 (이하) ( ls와 find함께 -maxdepth)도 유용 할 것이다. 당신은 그런 답변을 게시 할 수 있습니다!
가장 쉬운 방법은 달리는 것입니다
locate bat
이렇게하면 파일 이름에 "bat"가 포함 된 파일을 전체 컴퓨터에서 검색 할 수 있습니다.
PC에서 파일 목록을 새로 고치려면
updatedb
최근에 계정에 새 파일을 추가 한 경우이 명령을 실행하십시오.
updatetdb
updatedb마지막으로 수동 또는 자동으로 마지막으로 실행 된 시간보다 최신 ) sudo updatedb먼저 실행해야합니다.
bat.
find /로 locate하면서, 데이터베이스에서 검색을 find반복적으로 나열 /다음과 정규식과 일치합니다.
파일이 현재 디렉토리에있는 경우 다음을 사용하십시오.
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
또는 (한 줄씩) :
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
해당 파일을 시스템에서 검색하려면 다음을 사용하십시오.
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
대소 문자를 구분하지 않는 파일 이름 일치 옵션 또는 대소 문자를 구분하는 파일 이름 일치 옵션 find과 함께 명령 을 사용하려고합니다 . 둘 다 와일드 카드 이름을 사용할 수 있습니다. 따라서 "bat"가 포함 된 파일 이름을 찾으려면 다음을 사용하십시오.-iname-name
find / -iname '*bat*'
또는
find / -name '*bat*'
*수단 검색이 찾고되도록 "모든 문자 (들)", bat앞이나 뒤에, 아무도가없는 경우를 포함하여 모든 문자와 함께. /루트 디렉토리에서 검색이 반복적으로, 당신이 사용할 수있는 .현재 디렉토리, 또는에서 검색 할 위치의 절대 경로에서 재귀 적으로 검색 할를. 리눅스 쉘 스크립트에서 정규 표현식을 사용하여 파일을 검색하는 방법을 살펴보십시오.
-type f단순히 제외 디렉토리보다 더 수행하고있다, 사용자가 진정으로 원하는하지 무엇 자주는 .
좋은 오래된 것을 사용하십시오 find.
find <path_for_search> -type f -iname "*bat*"
예 :
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
부터 man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.