find는 검색기능과 여러가지 부가기능을 가진 명령어이다.
'-print' 는 검색결과를 파일의 절대경로로 표시하는 반면 '-exec ls -l \;' 는 ls -l 과 같은 형식으로 검색결과를 표시한다.
'-exec' 는 찾은 파일들을 대상으로 뒤에 나오는 명령어를 실행하라는 의미이며 {} 는 찾아진 파일들을 하나씩 대입됨을 의미한다. 따라서 검색된 파일의 개수만큼 -exec 뒤의 명령어가 실행된다.
용량이 0 인 비어있는 파일을 검색하는 것
# find / -empty -exec ls -l {} \;
특정 소유자의 파일 찾고자 할때
# find / -uid 500 -exec ls -l {} \;
특정 사용자의 소유파일들을 검색
# find / -user nestgoer -print
'-print' 는 검색결과를 파일의 절대경로로 표시하는 반면 '-exec ls -l \;' 는 ls -l 과 같은 형식으로 검색결과를 표시한다.
특정 디렉토리에서 특정 파일 검색
# find /home -name *.html -exec ls -l {} \;
검색된 파일을 바로 삭제
# find ~nestgoer -name *.bak -exec rm -f {} \;
'-exec' 는 찾은 파일들을 대상으로 뒤에 나오는 명령어를 실행하라는 의미이며 {} 는 찾아진 파일들을 하나씩 대입됨을 의미한다. 따라서 검색된 파일의 개수만큼 -exec 뒤의 명령어가 실행된다.
파일용량이 큰 파일들을 모두 검색하여 처리
# find / -size +100M -exec ls -lh {} \;
지정한 퍼미션을 가지고 있는 파일 검색
# find / -perm 4755 -exec ls -l {} \;
최근 몇분에 변경된 적이 있는 모든 파일 검색
# find /home/nestgoer -mmin 5 -exec ls -l {} \;
5 는 5분을 뜻하는데, 이때 +5 이면 5분 보다 더 이후(더 오래된 값), -5 이면 5분 보다 더 이전(덜 된 값)
최근 100 시간 이내에 사용된 적이 있는 파일(액세스된 파일) 검색
# find /home/nestgoer -atime -100 -exec ls -l {} \;
지정한 파일보다 더 최근에 사용된 적(액세스된 파일)이 있는 파일 검색
# find /home -anewer /home/nestgoer/begin -exec ls -l {} \;
지정한 파일보다 더 최근에 변경된 적이 있는 파일 검색
# find /home -newer /home/nestgoer/begin -exec ls -l {} \;
실행가능한 파일을 검색
# find /home -executable -print
실행 가능하지만 쓰지 못하는 파일을 대상으로 검색
# find /home -executable \! -writable -print
블록장치파일을 검색
# find /dev -type b -exec ls -l {} \;
문자장치파일을 검색
# find /dev -type c -exec ls -l {} \;
디렉토리를 검색
# find /etc -type d -print;
일반파일만을 검색
# find /home/nestgoer -type f -exec ls -l {} \;
심볼릭 링크파일을 검색
# find /etc -type l -exec ls -l {} \;
root 소유의 SetUID, SetGID, StickyBit 파일을 검색
# find / -user root -perm 4755 -exec ls -l {} \;
외부에서 제한없이 로그인할 수 있는 .rhosts 파일 검색
# find / -name .rhosts -exec ls -l {} \;
.bash_histroy 파일 검색
# find / -name .bash_history -exec ls -lh {} \;
무적파일의 검색
# find / -nouser -o -nogroup -exec ls -l {} \;
특정 문자열을 포함하고 있는 파일을 검색
# find /home -type f -exec egrep -i "linux" /dev/null {} \;
[옵션]
-empty
비어 있는 파일, 단 일반파일 또는 일반 디렉토리에 한함
-uid n
지정된 n값의 UID를 갖는 파일
-gid n
지정된 n값의 GID를 갖는 파일
-group 그룹명
지정한 그룹명에 소속된 파일
-name
지정된 형식의 패턴을 가지는 파일
-newer 파일
지정한 파일보다 더 최근에 변경된 적이 있는 파일
-used n
파일이 변경된 이후 최근 n일 이후에 액세스된 적이 있는 파일
-user uname
지정한 uname의 소유로 된 모든 파일(UID로 지정가능)
-amin n
최근 n분 이전에 액세스된 적이 있는 파일
-anewer 파일
지정한 파일보다 더 최근에 액세스된 적이 있는 파일
-atime n
최근 n*24 시간 전에 액세스된 적이 있는 파일
-mmin n
최근 n분 이전에 변경된 적이 있는 파일
-mtime n
최근 n*24 시간 이전에 변경된 적이 있는 파일
-executable
실행 가능한 파일
-readable
읽기 가능한 파일
-writable
쓰기 가능한 파일
-fstype type
지정한 파일시스템타입(type)에 존재하는 파일
-nogroup
소속그룹이 존재하지 않는 파일
-nouser
소속 사용자(ID)가 존재하지 않는 파일
-path 패턴
파일명이 패턴에 매칭되는 파일
-perm 모드
모드에서 지정된 퍼미션과 일치하는 퍼미션을 가진 파일만 해당됨.
-perm -mode
모드에서 지정된 퍼미션을 가진 모든 파일.
-regex 패턴
패턴에서 지정한 정규표현식에 매칭되는 파일
-size n[cwbkMG]
지정된 n 단위의 디스크공간을 사용하는 파일. 디폴트는 b
-type 타입
지정한 파일타입에 해당하는 파일. b,c,d,p,f,l,s 등이 있음
※ 위의 n 값은 +n 은 n 보다 큰 값을 의미하고, -n 은 n 값보다 작은 값을 의미하며, n 은 정확하게 n 값만을 의미한다.
[수행할작업(action)]
-delete
검색된 파일들을 삭제
-exec command ;
지정한 command 를 실행
-exec command {} +
검색된 파일들을 차례대로 매칭하면서 지정된 command 를 수행
-ls
'ls - dils' 를 수행
-ok command ;
-exec 와 같지만 실행하기 전에 먼저 사용자에게 표준입력으로 수행할 command 를 입력 받는다. 만약 입력이 없다면 지정된 command 를 수행한다.
검색된 파일들에 대하여 전체파일 경로로 파일리스트를 표준출력으로 출력한다.
-printf format
검색된 파일들에 대하여 지정된 format 형식으로 표준출력으로 출력
[연산자]
( )
괄호( )안의 연산이 먼저 행해짐
! expr
expr 이 거짓일때 참, 참일때 거짓이 됨.
-not expr
위의 ! expr 과 동일함 (POSIX 호환용)
expr1 expr2
AND 의 의미. expr1 이 거짓일 때에는 expr2 는 평가되지 않음
expr1 -a expr2
'expr1 expr2' 와 같음
expr1 -and expr2
'expr1 expr2' 와 같음 (POSIX 호환용)
expr1 -o expr2
OR 의 의미. expr1 이 참일 경우 expr2 는 평가되지 않음.
expr1 -or expr2
'expr1 -o expr2' 와 같은 의미