수색…


소개

find는 조건에 맞는 파일 (또는 디렉토리)에 대해 디렉토리를 재귀 적으로 검색 한 다음 선택한 파일에 대해 몇 가지 작업을 수행하는 명령입니다.

search_path selection_criteria 액션 찾기

통사론

  • [-H] [-L] [-P] [-D 디버그 옵션] [-Olevel] [path ...] [expression]

이름 또는 확장명으로 파일 검색

pwd 기준으로 특정 이름의 파일 / 디렉토리를 찾으려면 다음과 같이하십시오.

$ find . -name "myFile.txt"
./myFile.txt

특정 확장자를 가진 파일 / 디렉토리를 찾으려면 와일드 카드를 사용하십시오.

$ find . -name "*.txt"
./myFile.txt
./myFile2.txt

여러 확장자 ​​중 하나와 일치하는 파일 / 디렉토리를 찾으려면 or 플래그를 사용하십시오.

$ find . -name "*.txt" -o -name "*.sh"

이름이 abc로 시작하고 한 자리 다음에 하나의 알파 문자로 끝나는 파일 / 디렉토리를 찾으려면 다음을 수행하십시오.

$ find . -name "abc[a-z][0-9]"

특정 디렉토리에있는 모든 파일 / 디렉토리를 찾으려면

$ find /opt

디렉토리가 아닌 파일 만 검색하려면 -type f :

find /opt -type f

디렉토리 만 검색하려면 (일반 파일이 아닌) -type d :

find /opt -type d

유형별 파일 찾기

파일을 찾으려면 -type f 플래그를 사용하십시오.

$ find . -type f

디렉토리를 찾으려면, -type d 플래그를 사용하십시오

$ find . -type d

블록 장치를 찾으려면 -type b 플래그를 사용하십시오.

$ find /dev -type b

심볼릭 링크를 찾으려면, -type l 플래그를 사용하십시오

$ find . -type l

발견 된 파일에 대해 명령 실행하기

때로는 많은 파일에 대해 명령을 실행해야합니다. 이것은 xargs 사용하여 수행 할 수 있습니다.

find . -type d -print | xargs -r chmod 770

위 명령은에 관련된 모든 디렉토리 ( -type d )를 재귀 적으로 찾습니다 . (현재 작업 디렉토리)를 실행하고 chmod 770 을 실행하십시오. -r 옵션은 xargs 를 지정하여 find 가 파일을 찾지 find chmod 실행하지 않습니다.

파일 이름이나 디렉토리에 공백 문자가있는 경우이 명령이 중단 될 수 있습니다. 해결책은 다음을 사용하는 것입니다.

find . -type d -print0 | xargs -r -0 chmod 770

위의 예에서 -print0-0 플래그는 파일 이름이 null 바이트를 사용하여 구분되도록 지정하고 파일 이름에 공백과 같은 특수 문자를 사용할 수있게합니다. 이것은 GNU 확장이며 findxargs 의 다른 버전에서는 작동하지 않을 수 있습니다.


이를 수행하는 가장 좋은 방법은 xargs 명령을 건너 뛰고 find 가 하위 프로세스를 호출하도록하는 것입니다.

find . -type d -exec chmod 770 {} \;

여기에서 {} 는 해당 지점에서 파일 이름을 사용하려고 함을 나타내는 자리 표시 자입니다. find 는 각 파일에 대해 개별적으로 chmod 를 실행합니다.

다른 방법으로는 모든 파일 이름을 chmod단일 호출로 전달할 수 있습니다.

find . -type d -exec chmod 770 {} +

위의 xargs 스 니펫의 동작이기도합니다. 각 파일을 개별적으로 호출하려면 xargs -n1 사용할 수 있습니다.


세 번째 옵션은 bash가 파일 이름 목록을 반복하여 출력을 find 하는 것입니다 :

find . -type d | while read -r d; do chmod 770 "$d"; done

이것은 문법적으로 가장 어수선하지만, 발견 된 각 파일에 대해 여러 명령을 실행하고자 할 때 편리합니다. 그러나 이것은 이상한 이름을 가진 파일 이름에도 불구하고 안전하지 않습니다.

find . -type f | while read -r d; do mv "$d" "${d// /_}"; done

파일 이름의 모든 공백이 밑줄로 바뀝니다. (이 예제는 선행 디렉토리 이름에 공백이 있으면 작동하지 않습니다.)

위의 문제는 while read -r 줄 당 하나의 항목을 기대하지만 파일 이름에 줄 바꿈이 포함될 수 있다는 것입니다. 또한 read -r 은 후행 공백을 잃게됩니다. 상황을 돌려서 해결할 수 있습니다.

find . -type d -exec bash -c 'for f; do mv "$f" "${f// /_}"; done' _ {} +

이렇게하면 -exec 은 완전히 정확하고 이식 가능한 형식으로 파일 이름을받습니다. bash -c 는 여러 인수로 인수를받습니다.이 인수는 $@ 에 올바르게 인용되어 있습니다 (스크립트는이 이름을 올바르게 처리해야합니다.) 파일 이름이 들어있는 모든 변수는 두 배로해야합니다 인용 부호.)

bash -c 'script' 의 첫 번째 인수가 $0 을 채우는 데 사용되므로 신비한 _ 이 필요합니다.

액세스 / 수정 시간으로 파일 찾기

ext 파일 시스템에서 각 파일은 연관된 Access, Modification 및 (Status) Change 시간을 가지고 있습니다 -이 정보를 보려면 stat myFile.txt ; find 내에서 플래그를 사용하여 특정 시간 범위 내에서 수정 된 파일을 검색 할 수 있습니다.

최근 2 시간 내에 수정 파일을 찾으려면 :

$ find . -mmin -120

지난 2 시간 이내에 수정 되지 않은 파일을 찾으려면 다음을 수행하십시오.

$ find . -mmin +120

사용하는 CCESS 시간 또는 C 처해진 번 검색 - 상기 예에서는 수정 된 시간을 검색하는 a , 또는 c 따라서.

$ find . -amin -120
$ find . -cmin +120

일반 형식 :

-mmin n : 파일이 n 분 전에 수정되었습니다.
-mmin -n : 파일이 n 분 미만 전에 수정되었습니다.
-mmin +n : 파일이 n 분 넘게 수정되었습니다.


지난 3 일 이내에 수정 파일 찾기 :

find . -mtime -2

지난 2 일 내에 수정 되지 않은 파일 찾기

find . -mtime +2

액세스 시간 및 상태 변경 시간은 각각 -atime-ctime 을 사용하십시오.

일반 형식 :

-mtime n : 파일이 nx24 시간 전에 수정되었습니다.
-mtime -n : 파일이 nx24 시간 전에 수정되었습니다.
-mtime +n : 파일이 nx24 시간 이상 수정되었습니다.

2007-06-07부터 2007-06-08까지 날짜 범위 에서 수정 된 파일 찾기 :

find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08  

1 시간 전부터 10 분 전까지 의 타임 스탬프 범위 에서 액세스 한 파일 찾기 (파일을 타임 스탬프로 사용) :

touch -t $(date -d '1 HOUR AGO' +%Y%m%d%H%M.%S) start_date
touch -t $(date -d '10 MINUTE AGO' +%Y%m%d%H%M.%S) end_date
timeout 10 find "$LOCAL_FOLDER" -newerat "start_date" ! -newerat "end_date" -print  

일반 형식 :

-newerXY reference : 현재 파일의 시간 소인을 참조와 비교합니다. XYat (액세스 시간), mt (수정 시간), ct (변경 시간) 등과 같은 값 중 하나를 가질 수 있습니다. reference 는 지정된 시간 소인 (액세스, 수정, 변경) 또는 절대 시간을 설명하는 문자열 을 비교하려는 파일 whe의 이름입니다 .

특정 확장명으로 파일 찾기

현재 경로에서 특정 확장자의 모든 파일을 찾으려면 다음 find 구문을 사용할 수 있습니다. .extension 갖는 모든 이름을 일치시키기 위해 bash's 빌트인 glob 구조를 사용함으로써 작동합니다.

find /directory/to/search -maxdepth 1 -type f -name "*.extension"

현재 디렉토리에서만 .txt 유형의 모든 파일을 찾으려면 다음을 수행하십시오.

find . -maxdepth 1 -type f -name "*.txt"

크기에 따라 파일 찾기

15MB보다 큰 파일 찾기 :

find -type f -size +15M

12KB 미만의 파일 찾기 :

find -type f -size -12k

정확히 12KB 크기의 파일 찾기 :

find -type f -size 12k

또는

find -type f -size 12288c

또는

find -type f -size 24b

또는

find -type f -size 24

일반 형식 :

find [options] -size n[cwbkMG]

n 블록 크기의 파일을 찾습니다. + n은 n 블록 이상을 의미하고, -n은 n 블록보다 작음을 의미하며 n은 아무런 부호도 표시하지 않고 정확히 n 블록을 의미합니다.

블록 크기 :

  1. c : 바이트
  2. w : 2 바이트
  3. b : 512 바이트 (기본값)
  4. k : 1KB
  5. M : 1MB
  6. G : 1GB

경로 필터링

-path 매개 변수를 사용하면 결과의 경로와 일치하는 패턴을 지정할 수 있습니다. 패턴은 이름 자체와도 일치 할 수 있습니다.

경로 (폴더 또는 이름)에 log 파일 만 찾으려면 다음과 같이하십시오.

find . -type f -path '*log*'

log (모든 레벨에서)라는 폴더 내의 파일 만 찾으려면 다음과 같이하십시오.

find . -type f -path '*/log/*'

log 또는 data 폴더 내의 파일 만 찾으려면 다음과 같이하십시오.

find . -type f -path '*/log/*' -o -path '*/data/*'

bin 폴더에 포함 된 파일을 제외한 모든 파일을 찾으려면 다음과 같이하십시오.

find . -type f -not -path '*/bin/*'

bin 또는 로그 파일이라는 폴더에있는 파일을 제외한 모든 파일을 모두 찾으려면 다음을 수행하십시오.

find . -type f -not -path '*log' -not -path '*/bin/*'


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow