수색…
소개
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 확장이며 find
및 xargs
의 다른 버전에서는 작동하지 않을 수 있습니다.
이를 수행하는 가장 좋은 방법은 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
: 현재 파일의 시간 소인을 참조와 비교합니다. XY
는 at
(액세스 시간), 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 블록을 의미합니다.
블록 크기 :
-
c
: 바이트 -
w
: 2 바이트 -
b
: 512 바이트 (기본값) -
k
: 1KB -
M
: 1MB -
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/*'