find는 원하는 file을 찾을 경우 사용하며, file정보를이용하여 검색하기 때문에 grep보다 빠른 검색가능하다.
SYNOPSIS find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
1.1. Find 의 옵션
Find는 FILE의 정보기준으로 검색을 하며, 다양한 옵션들을 제공하여 빨리 원하는 FILE들을 찾아준다.
- Find 기본연산옵션
- FILE의 이름관련 연산
- FILE의 시간관련 연산
- FILE의 사이즈관련 연산
- AND/OR/NOT 연산제공 : 상위 1/2/3번의 조합이 가능
**SIZE 관련 연산 -size n[cwbkMG] File uses n units of space. `b' for 512-byte blocks (this is the default if no suffix is used) `c' for bytes `w' for two-byte words `k' for Kilobytes (units of 1024 bytes) `M' for Megabytes (units of 1048576 bytes) `G' for Gigabytes (units of 1073741824 bytes) **TIME 관련 연산 (time: 기본단위는 24*hours , min: minutes) -mtime n : modified n days ago (파일의 내용을 변경시 ) -mmin n : modified minutes ago -atime n : access n days ago (파일을 오픈했을 경우, cat, vi, grep, head ) -amin n : access minutes ago -ctime n : changed n days ago (파일의 속성이 변경시) -cmin n : changed minutes ago **SIZE/TIME의 숫자개념 -n : for less than ( < n ) +n : for great than ( > n ) n : for exactly n ( n )
상위 FILE의 SIZE 및 TIME 연산의 AND/OR/NOT 연산가능
**AND OR 연산 및 NOT 연산 -not expr Same as ! expr, but not POSIX compliant. expr1 expr2 Two expressions in a row are taken to be joined with an implied "and"; expr2 is not evaluated if expr1 is false. expr1 -a expr2 Same as expr1 expr2. expr1 -and expr2 Same as expr1 expr2, but not POSIX compliant. expr1 -o expr2 Or; expr2 is not evaluated if expr1 is true. expr1 -or expr2 Same as expr1 -o expr2, but not POSIX compliant. expr1 , expr2 List;
- Find의 기타옵션
- 다른 command 실행연산
- FILE 검색결과의 출력방법
**실행연산 -exec command ; **output 종류 newline을 사용여부 및 프로그래밍으로 output을 만들수 있다 이 부분 man을 참고 -print0 True; print the full file name on the standard output, followed by a null character -print True; print the full file name on the standard output, followed by a newline. -printf format True; print format on the standard output, %p File's name. %P File's name with the name of the command line argument under which it was found removed. %s File's size in bytes. %b The amount of disk space used for this file in 512-byte blocks. %k The amount of disk space used for this file in 1K blocks.
2. Find 예제
2.1 FILE의 이름기준 검색
* : 여러글자 대체
? : 한글자만 대체
[1-8] : 한글자만 정의 (1~8)
[a-c] : 한글자만 정의 (a~c)
$ find . -name expr// 원하는 검색어 $ find . -name '*.o' // *.o 파일 검색 (가능하면 '' or ""사용) $ find . -name *.h // *.h 파일 검색 $ find . -name *droid-[2-5]* // android-2/4/5 검색 $ find . -name *droid-[2-5].[0-1]* //e.g android-2.0 검색 $ find ./ -name '*aic*.o' // 중간에 aic 파일 검색
2.2 FILE의 시간기준 검색
시간은 모두 과거의 기준으로 검색을 하기에 +- 모두 과거시간들과 검색한다.
다만 차이가 있다면 아래와 같이 n 에따라 -:less than or +:great than or 일치 있을 뿐이다.
$ find . -mtime -7 // 수정날짜 (n < 7 ) 현재 FILE(0) ~ 7일전 FILE 검색 $ find . -mmin 30 // 수정시간 ( n ) 오직 30분전 변경된 FILE 만 검색 $ find . -mmin -30 // 수정시간 ( n < 30 ) 현재 FILE(0) ~ 30분전 FILE 검색 $ find . -mmin +30 // 수정시간 ( n > 30 ) 30분전 FILE ~ 이전전부 FILE 검색 $ find . -mmin +30 -mmin -60 // 수정시간 (30 >n , n < 60) 30분전 ~ 60분전 사이만 검색 (AND연산) $ find . -atime n/-n/+n // 액세스 날짜 (파일오픈) $ find . -amin n/-n/+n // 액세스 시간 $ find . -ctime n/-n/+n // 파일속성변경 날짜 (파일오픈 및 사용) $ find . -cmin n/-n/+n // 파일속성변경 시간
2.3 FILE의 크기기준검색
$ find ./ -size +50k $ find ./ -size +50k -printf "%p %s\n" // printf format을 만들어 사용 자세한 내용은 man참고 $ find ./ -size +50k | xargs du -hs $ find ./ -size +50k | xargs du -h
2.4 연산의 AND/OR/NOT 검색
$ find ./ -name 'snd-*.o' -o -name 'snd*.h' // NAME 연산 NAME 연산 OR연산 적용 $ find ./ -name 'snd-soc*.o' -a -name 'snd*.o' // NAME 연산 NAME 연산 AND 연산적용 $ find ./sound/ -name '*.o' -not -name 'built-in.o' //NAME 연산 NAME 연산 NOT 연산적용 ( *.o 검색 하고, -not으로 제외) $ find . -mtime -7 -name '*.c' -o -name '*.h' // 7일전- 현재 수정한 파일 중 *.c or *.h 검색 $ find . -mmin -60 -name '*.c' -o -name '*.h' // 60분전 - 현재 수정한 파일 중 *.c or *.h 검색
- 수정시간 과 파일이름 검색이용 예제
$ find . -mtime -7 -name '*.c' -o -name '*.h' // 7일전- 현재 수정한 파일 중 *.c or *.h 검색 $ find . -mmin -60 -name '*.c' -o -name '*.h' // 60분전 - 현재 수정한 파일 중 *.c or *.h 검색
- 수정시간 현재부터 30일 이전까지 관련 내용 검색 ( 30 < n )
$ find . -mtime -30 -name '*.c' -o -name '*.h' // 검색내용 중 *.c 혹은 *.h 검색 $ find . -mtime -30 -name '*.h' // 검색내용 중 *.h 만 재검색
- 30이전 부터 60이전까지 관련내용 검색 ( 30 > n && 60 < n )
$ find . -mtime +30 -mtime -60 -name '*.c' -o -name '*.h' $ find . -mtime +30 -mtime -60 -name '*.h'
- find를 이용한 내부 command 이용
아래 내용은 날짜별로 관련내용을 분류할때 사용. (mv를 실행)
- '{}' ';' find 내부 command
$ find . -name "*.VER" -mtime -31 -exec mv '{}' /opt/html/31';' -print $ find . -name "*.VER" -mtime +31 -mtime -62 -exec mv '{}' /opt/html/62 ';' -print
http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime