답변:
bat
어디서나 파일 찾기내부 /path/to/folder
에 이름이 포함 된 모든 파일을 찾으려면 bat
다음을 사용할 수 있습니다.
find /path/to/folder -name '*bat*'
나는 한 인용 검색 패턴을 *bat*
따옴표 생략하고 파일이 일치한다면, 때문에 *bat*
현재 디렉토리, 쉘이 확대 될 *bat*
그들의리스트로하고 통과 그 에게 find
. 그렇다면 find
제대로 작동하지 않습니다. ( \*bat\*
그리고 "*bat*"
작동합니다.)
현재있는 폴더 (예 : cd
ed 폴더)를 검색하려면 .
평소와 같이을 사용하십시오.
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.