와일드 카드 일치에 따라 현재 및 하위 폴더의 모든 파일을 재귀 적으로 찾을 수 있습니까?


1887

와일드 카드 일치에 따라 현재 및 하위 폴더의 모든 파일을 재귀 적으로 찾을 수 있습니까?

답변:


2739

찾기 를 사용하십시오 :

find . -name "foo*"

find시작점이 필요하고 .(점)은 현재 디렉토리를 가리 킵니다.


21
나는 이것이 리눅스로 태그되어 있다는 것을 알고 있지만 언급 할 가치가있다 : 경로는 리눅스가 아닌 다른 * nix 변형에 필요하다. Linux에서는 도트를 사용하려는 경우 경로는 선택 사항입니다.
IslandCow

4
@Seatter "foo *"는 "foo"로 시작하는 모든 파일을 찾도록 지시합니다. 그의 예일뿐입니다. "gpio *"를 사용하여 이름이 gpio로 시작하는 모든 파일을 찾거나 "gpio1"만으로 gpio1이라는 모든 파일을 찾을 수 있습니다.
schumacher574

29
"foo *"는 따옴표 안에 있으므로 쉘은 그것을 찾기 전에 전달하지 않습니다. 방금 한 경우 find . foo*는이 foo*확장 한 다음 찾기를 위해 전달 될 것입니다.
grinch

32
" "재귀 검색에 매우 필요한 스트레스 .
WesternGun

3
또한 유용한 정보 : 권한이없는 디렉토리 (또는 다른 오류)에 대한 알림을받지 않으려면 다음을 수행하십시오.find . -name "foo*" 2>/dev/null
Jobbo

221

grep으로 찾는 배관이 더 편리합니다. 임의의 와일드 카드 일치를 위해 정규식의 모든 기능을 제공합니다.

예를 들어 파일 이름에서 대소 문자를 구분하지 않는 문자열 "foo"가있는 모든 파일을 찾으려면 다음을 수행하십시오.

~$ find . -print | grep -i foo

57
find또한, 보유 -iname, -regex그리고 -iregex그렇게하기 위해 대소 문자 구별 와일드, 정규식, 및 대소 문자 구별 정규식 매칭 플래그 배관 것은 grep불필요하다.
iobender

7
나는 그것이 불필요한 것이 아니라 더 편리하다고 생각합니다.
Elijah Lynn

1
그러나 grep -v로 파이핑하면 간단한 문자열이나 정규 표현식을 사용하여 원하지 않는 항목을 제거 할 수 있습니다.
door_number_three

3
@iobender-안타깝게도 모든 시스템에 find이러한 옵션을 지원 하는 명령이 제공되는 것은 아니라는 사실을 알 수 있습니다. 때로는 grep유일한 옵션이됩니다.
Mr. Llama

150

find 패턴과 일치하는 모든 파일을 찾습니다.

find . -name "*foo"

그러나 사진을 원한다면 :

tree -P "*foo"

도움이 되었기를 바랍니다!


18
brew install treeapt-get설치되지 않은 Mac OSX 사용자의 경우
DeBraid

1
macOS Sierra에서 테스트 한 후 '--print'-> 'find를 추가하십시오. 이름 "* foo"--print '. superuser.com/questions/177289/searching-mac-through-terminal
john-salib

2
CentOS 용 sudo yum 설치 트리 -y
Santosh Kumar Arjunan

39
find -L . -name "foo*"

몇 가지 경우에는 기호 디렉토리 링크를 처리하기 위해 -L 매개 변수가 필요했습니다. 기본적으로 심볼릭 링크는 무시됩니다. 이 경우 디렉토리를 하위 디렉토리로 변경하고 패턴과 일치하는 파일을 보지만 파일 이름을 반환하지 않으므로 상당히 혼란 스러웠습니다. -L을 사용하면 해당 문제가 해결됩니다. 찾기에 대한 기호 링크 옵션은 -P -L -H입니다.


1
L 스위치는 매우 유용합니다. 많은 경우에 사용자는 소프트 링크인지 일반 디렉토리인지에 상관없이 기본 디렉토리에 대해 전혀 모릅니다. 따라서 의심스러운 경우 항상 L 옵션을 사용하는 것이 좋습니다. 적어도 그것은 항상 나를 도왔습니다.
Ritesh

2
그게 답이었습니다. 감사!
iedmrc

33

이 새로운 글 로빙 옵션을 지원 하는 경우 (으로 활성화 할 수 있음 shopt -s globstar) 다음을 사용할 수 있습니다.

echo **/*foo*

파일이나 폴더를 재귀 적으로 찾을 수 있습니다. 이것은 Bash 4, zsh 및 유사한 쉘에서 지원됩니다.


개인적 으로이 쉘 함수를 정의했습니다.

f() { find . -name "*$1*"; }

참고 : 위의 행은 쉘에 직접 붙여 넣거나 사용자 ~/.bashrc파일에 추가 할 수 있습니다.

그런 다음 다음을 입력하여 파일을 찾을 수 있습니다.

f some_name

또는 간단한 구문 으로 fd유틸리티 를 사용할 수 있습니다 ( 예 :) fd pattern.


1
이것은 단지 단일 수준으로 들어갑니다. 나를 위해 하위 디렉토리로
되풀이

3
@Broncha shopt -s globstar명령으로 확장 globbing을 활성화해야하기 때문 입니다. 이것은 Bash, zsh 및 유사한 쉘에서 지원됩니다.
kenorb 2016 년

bash-3.2$ shopt -s globstar제공bash: shopt: globstar: invalid shell option name
drewish

@drewish Bash를 4.x로 업그레이드해야합니다
kenorb

에코 * / * 푸 찾기보다 덜 빠르다
조세프 Klimuk

31

fd

find너무 느린 경우 fd유틸리티를 사용해보십시오 -간단하고 빠른 대안find 녹 작성은.

통사론:

fd PATTERN

데모:

홈페이지 : https://github.com/sharkdp/fd


17
거의 9 년 만에 SO에 대한 GIF를 처음 보았습니다. 좋은 작업!
Joshua Pinter

1
이러한 성능 결과는 매우 유망 해 보입니다. 당신은 가정 양조에 fd를 추가하는 것을 고려할지도 모른다…
Gr3go

오프 주제 : 데모 용 svg 파일을 만드는 데 어떤 도구를 사용 했습니까?
aprodan

2
@aprodan 데모 이미지는 GitHub에서 복사되었지만 사용하고 있다고 생각한 asciinema다음 GIF 형식으로 변환했지만 확실하지 않습니다.
kenorb

1
실제로 SVG 형식이므로 asciicast2vector사용할 수 있습니다.
kenorb

27
find <directory_path>  -type f -name "<wildcard-match>"

와일드 카드 일치에서 일치시킬 문자열을 제공 할 수 있습니다 (예 : * .c (모든 c 파일))


1
지정된 대로만 파일을 검색하므로 귀하의 답변이 여기에서 가장 정확합니다. 유형을 지정하지 않은 다른 디렉토리는 디렉토리를 리턴합니다.
wilsotc

"-type f"디렉토리를 검색하려면 "-type d"로 변경할 수 있습니다.
XYZ_Linux

11

당신이 사용할 수있는:

# find . -type f  -name 'text_for_search'

REGX를 사용하려면 -iname

# find . -type f  -iname 'text_for_search'

9

다음 명령은 현재 및 하위 폴더에 "pattern"이라는 정확한 이름을 가진 모든 파일을 나열합니다.

find ./ -name "pattern"


8

재귀 파일을 검색하는 기본 방법이며 대부분의 경우에 사용 가능합니다.

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 작업은 루트별로 구성해야합니다.


7

파일 검색
find / -xdev -name settings.xml -> 전체 컴퓨터
find ./ -xdev -name settings.xml ->

확장명을 가진 파일의 현재 디렉토리 및 하위 디렉토리

find . -type f -name "*.iso"

6

우리가 재귀 적으로 갈 때 locate가 많이 사용되지 않는다는 것이 놀랍습니다.

먼저 "$ PWD"를 찾아 관심있는 현재 폴더에있는 파일 목록을 가져온 다음 원하는대로 greps를 실행합니다.

locate "$PWD" | grep -P <pattern>

물론 이것은 updatedb가 수행되고 인덱스가 주기적으로 업데이트된다고 가정합니다. 이것은 찾기를 실행하고 트리 아래로 내려가는 것보다 파일을 찾는 가장 빠른 방법입니다. 완전성을 위해 이것을 언급하십시오. 나무가 너무 무겁지 않으면 find를 사용하는 것에 대해 아무것도 없습니다.


locate "$PWD*.mp4"grep
Jefferey Cave

5

아래 명령은 모든 파일을 검색하는 데 도움이됩니다.

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"

1
왜 지구상에서 grep을 사용합니까? stderr을 null로 리디렉션하십시오find / -iname '*C*.xml' 2>/dev/null
phuclv 5

3

와일드 카드로 특수 파일을 검색하려는 경우 다음 코드를 사용할 수 있습니다.

find . -type f -name "*.conf"

여기에서 모든 .conf 파일을 검색한다고 가정합니다.

.여기서부터 검색 시작 (현재 위치)
-type은 여기서 파일 (f) 인 검색 항목의 유형을 의미합니다. * .conf 이름을
-name가진 파일을 검색한다는 의미 입니다.


3

현재 디렉토리와 하위 디렉토리의 모든 관련 파일을 검색하여 행 수를 개별적으로 계산하고 완전히 계산합니다.

find . -name "*.wanted" | xargs wc -l

2

사용하다

find path/to/dir -name "*.ext1" -o -name "*.ext2"

설명

  1. 첫 번째 매개 변수는 검색하려는 디렉토리입니다.
  2. 기본적으로 find재귀가 수행됩니다.
  3. -o약자입니다 -or. 따라서 위는이 와일드 카드 또는이 와일드 카드를 검색 함을 의미합니다. 패턴이 하나만 있으면 필요 없습니다 -o.
  4. 와일드 카드 패턴 주위에 따옴표가 필요합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.