etc./StackOverFlow

와일드 카드 일치를 기반으로 현재 및 하위 폴더의 모든 파일을 어떻게 재귀적으로 찾을 수 있습니까?

청렴결백한 만능 재주꾼 2021. 11. 26. 06:55
반응형

질문자 :john


와일드 카드 일치를 기반으로 현재 및 하위 폴더의 모든 파일을 어떻게 재귀적으로 찾을 수 있습니까?



이를 위해 찾기 를 사용하십시오.

 find . -name "foo*"

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


tux21b

grep으로 파이핑하는 것이 더 편리한 경우가 많습니다. 임의의 와일드카드 일치를 위한 정규식의 모든 기능을 제공합니다.

예를 들어, 파일 이름에 대소문자를 구분하지 않는 문자열 "foo"가 있는 모든 파일을 찾으려면:

 ~$ find . -print | grep -i foo

Paul Whipp

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

 find . -name "*foo"

그러나 사진을 원하는 경우:

 tree -P "*foo"

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


IslandCow

fd

find 가 너무 느린 경우, fd 유틸리티를 사용해 보세요. Rust로 작성된 find 의 간단하고 빠른 대안입니다.

통사론:

 fd PATTERN

데모:

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


kenorb

find -L . -name "foo*"

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


toddcscar

이 새로운 글로빙 옵션을 shopt -s globstar 로 활성화 가능), 다음을 사용할 수 있습니다.

 echo **/*foo*

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


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

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

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

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

 f some_name

fd pattern 과 같은 간단한 구문 fd 유틸리티 를 사용할 수 있습니다.


kenorb

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

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


XYZ_Linux

당신이 사용할 수있는:

 # find . -type f -name 'text_for_search'

REGX를 사용하려면 -iname

 # find . -type f -iname 'text_for_search'

user8848899

파일 검색을 위해
find / -xdev -name settings.xml --> 전체 컴퓨터
find ./ -xdev -name settings.xml --> 현재 디렉토리 및 하위 디렉토리

확장자 유형이 있는 파일의 경우

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

Alberto

재귀 파일을 검색하는 기본 방법이며 대부분의 경우 사용할 수 있습니다.

 find . -name "filepattern"

그것은 당신이 위치한 현재 디렉토리 내에서 파일 이름이나 패턴에 대한 재귀 순회를 시작합니다. find 명령을 사용하면 와일드카드와 다양한 스위치를 사용하여 전체 옵션 목록을 볼 수 있습니다.

 man find

또는 시스템에서 매뉴얼 페이지를 사용할 수 없는 경우

 find --help

그러나 전체 파일 시스템을 순회하고 파일을 인덱싱하는 더 현대적이고 빠른 도구가 있습니다. 이러한 일반적인 도구 중 하나는 찾기 또는 위치 지정/mlocate입니다. 설치 방법에 대한 OS 설명서를 확인해야 합니다. 설치하면 데이터베이스를 시작해야 합니다. 설치 스크립트가 자동으로 수행하지 않으면 다음을 입력하여 수동으로 수행할 수 있습니다.

 sudo updatedb

그리고 특정 파일 형식을 찾는 데 사용하려면

 locate filename

또는 현재 디렉토리 내에서 파일 이름이나 패턴을 찾으려면 다음을 입력할 수 있습니다.

 pwd | xargs -n 1 -I {} locate "filepattern"

파일 데이터베이스를 살펴보고 입력한 패턴과 일치하는 경로 이름을 빠르게 인쇄합니다. 의 위치 옵션의 전체 목록을 보려면 다음을 입력합니다 locate --help 또는 man locate

또한 크론 작업을 통해 예약된 시간에 데이터베이스를 업데이트하도록 찾기를 구성할 수 있으므로 오전 1시에 db를 업데이트하는 샘플 크론은 다음과 같습니다.

 0 1 * * * updatedb

이러한 cron 작업은 루트로 구성해야 합니다. 왜냐하면 updatedb는 전체 파일 시스템을 순회하기 위해 루트 권한이 필요하기 때문입니다.


Aleksandar Pavić

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

find ./ -name "pattern"


Anshul Singhal

사용하다

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

설명

  1. 첫 번째 매개변수는 검색하려는 디렉토리입니다.
  2. 기본적으로 find 는 재귀를 수행합니다.
  3. -o -or 나타냅니다. 따라서 위는 이 와일드카드 또는 이 와일드카드를 검색하는 것을 의미합니다. 패턴이 하나만 있으면 -o 가 필요하지 않습니다.
  4. 와일드카드 패턴 주위에 따옴표가 필요합니다.

Shital Shah

나는 재귀적으로 갈 때 위치 찾기가 많이 사용되지 않는다는 사실에 놀랐습니다.

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

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

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


melchi

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

1) 경우에 관계없이
2) 결과 권한이 없는 폴더 제외
3) 루트 또는 원하는 경로에서 검색합니다. / 당신이 선호하는 경로로 변경하십시오.

구문:
-이름 찾기 '' 2>&1 | grep -v "권한 거부됨"

예시

/ -이름 'C*.xml' 찾기 2>&1 | grep -v "권한 거부됨"

 find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"

MukeshKoshyM

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

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

여기에서 모든 .conf 파일을 검색한다고 가정해 보겠습니다.

. 여기(현재 장소)에서 시작된 검색을 의미합니다.
-type 은 여기서 파일(f)인 검색 항목의 유형을 의미합니다.
-name 은 *.conf 이름을 가진 파일을 검색하려는 것을 의미합니다.


Saman Bayat

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

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

Jay Yang

설치된 경우 fd 명령으로 시도하십시오. 설치 지침

'이름'으로 시작하는 모든 파일 찾기

 fd "name*"

이 명령은 모든 .hidden.gitignore ed 파일을 무시합니다.

.gitignore ed 파일을 포함하려면 아래와 같이 -I 옵션을 추가하십시오.

 fd -I "name*"

숨김 파일을 포함하려면 아래와 같이 -H

 fd -H "name*"

Robert Ranjan

Python>3.5에서는 glob , . 현재 폴더를 가리키고 .txt 파일을 찾습니다.

 python -c "import glob;[print(x) for x in glob.glob('./**/*txt', recursive=True)]"

이전 버전의 Python의 경우 glob2를 설치할 수 있습니다.


Katu

출처 : http:www.stackoverflow.com/questions/5905054/how-can-i-recursively-find-all-files-in-current-and-subfolders-based-on-wildcard

반응형