본문 바로가기

|배움의 길|/리눅스 명령어

[find] find 옵션 총정리

반응형
find는 글자 그대로 사용자 원하는 파일을 찾아주는 역활을 한다. 단순히 파일
이름만을 가지고 찾는 것은 물론, 파일 모드, 파일 타입, 크기, 마지막으로
접근한 시간등 여러가지 다양한 조건으로 파일을 찾아준다. 사용 방법은 다음과
같다.

옵션 ------------------------------------------------------------------------------------
-amin N            N분 전에 마지막으로 접근한 파일들
-cmin N            N분 전에 마지막으로 퍼미션을 변경한 파일
-mmin N            N분 전에 마지막으로 내용을 수정한 파일
-atime N           N * 24시간전에 마지막으로 접근한 파일
-ctime N           N * 24시간전에 마지막으로 퍼미션을 변경한 파일
-mtime N           N * 24시간전에 마지막으로 내용를 수정한 파일
-anewer 파일명     지정된 파일보다 더 최근에 접근한 파일들. -follow 옵션을 쓸 경우 이
                   옵션을 더 앞에 써야 한다.
-cnewer 파일명     지정된 파일보다 더 최근에 변경된 파일들. -follow 옵션을 쓸 경우 이
                   옵션을 더 앞에 써야 한다.
-newer 파일명      주어진 파일보다 더 최근 파일을 검색
-used N            파일이 수정되고 N일째 접근한 파일
-empty             빈 디렉토리나 파일을 찾기
-true              묻는 상황이 나올 경우 항상 예로 대답
-false             묻는 상황이 나올 경우 항상 아니오로 대답
-uid N             수치 사용자 아이디가 맞는 것을 출력
-gid N             그룹 아이디를 수치로 검색
-user 사용자명     소유권이 해당 사용자와 일치하는 파일 찾기
-group 그룹명      그룹소유권이 해당된 것과 일치하는 것 찾기
-name 파일명       파일명이 일치하는 것을 찾는다. 와일드카드가 사용될수 있는데,
                   이때는 따옴표로 묶어 주어야 한다.
-nouser            사용자 계정을 삭제했을 경우등, 소유자가 없는 파일 검색
-nogroup           파일 소유자의 그룹이 없는 파일 검색
-perm [+-]모드     755를 줄 경우 rwxr-xr-x 퍼미션으로 된 것을 검색
-size N[bckw]      N유닛이라는 공간을 차지한 파일을 찾는다. +N은 N이상, -N은
                   N이하용량. 실제 파일용량이 아닌, 파일이 차지한 공간을 기준으로 한다.
                   기본적으로 1유닛은 b를 붙인 것으로 512바이트, c를 붙이면 바이트, k를
                   붙이면 킬로바이트, w는 2바이트
-type [bcdpfls]    찾으려는 파일 타입을 설정하는 옵션으로 bcdpfls 중 하나를 선택할수
                   있다. b는 블록 특수파일, c는 캐릭터 특수파일, d는 디렉토리, p는 파이프,
                   f는 일반적인 파일, l은 심볼릭 링크, s는 소켓
-xtype [bcdpfls]   type과 같으며 심볼릭 링크의 경우 그 대상 파일까지 조사
-mount             다른 파일시스템의 디렉토리는 검색하지 않는다.
-xdev              다른 파일시스템의 디렉토리도 출력
-links N           N개의 링크를 가진 파일 찾기
-exec 명령 {} ;   찾은 내용이 {}에 포함되는 명령식을 작성할수 있다. 끝에 꼭 ;를
                   붙여준다. 묻지 않고 검색후 바로 실행한다.
-ok 명령 {} ;     찾은 내용이 {}에 포함되는 명령식을 작성할수 있다. 끝에 꼭 ;를
                   붙여준다. 실행하기 전에 묻는다.
-depth             별도로 지정할 필요가 없고, 서브 디렉토리까지 찾는 옵션
-print             기본값으로 설정되어 있고, 이 옵션이 주어지면 찾은후 화면출력
-fprint 파일명     결과를 파일로 출력
-version, --version프로그램의 버전을 출력
-help, --help      명령어 옵션 도움말 출력


예제 ------------------------------------------------------------------------------------

# find / -name '*.LOG' -print

-name 파일명
파일명과 일치하는 파일을 찾는다.
와일드 카드(*)도 사용가능하다.

# find / -perm 666 -print

-perm +모드/-모드/모드
파일 퍼미션 조건이 모드와 일치하는 것만을 찾아 준다.

# find / -type d -print

-type 타입
파일의 타입을 지정하여, 찾고자하는 파일을 찾는다.
타입의 종류는 다음과 같다.
b : 블록 특수 파일(block device)
c : 캐릭터 특수 파일 (character deice)
d : 디렉토리(directory)
f : 일반파일(file)
l : 심볼릭 링크(link)
p : 파이프 (pipe)
s : 소켓 (socket)

단지 현재의 디렉토리에서만 서브디렉토리를 찾을려면,
ls -l | grep '^d' 하면 되지요?

# find / -atime -7 -print

-atime +n/-n/n
최근 n일 이전에 액세스된 파일을 찾아준다.(accessed time)
+n은 n일 또는 그보다 더 오래 전의 파일을
-n은 오늘 부터 n일 전까지의 파일을
  n은 정확히 n일 전에 액세스되었음을 의미한다.

# find / -ctime -7 -print

-ctime +n/-n/n
atime과 비슷하다. 다른 점은 atime은 얼마나 오래전에 파일을 액세스
하였는가를 검사하지만 ctime은 파일의 퍼비션을 마지막으로 변경시킨 날짜를
의미한다.(changed time)
최근 n일 이전에 액세스된 파일을 찾아준다.
+n은 n일 또는 그보다 더 오래 전의 파일을
-n은 오늘 부터 n일 전까지의 파일을
  n은 정확히 n일 전에 수정되었음을 의미한다.

# find / -mtime -7 -print

-mtime +n/-n/n
ctime과 비슷하다. 다른 점은 ctime은 파일의 퍼미션을 변경시킨 날짜를 의미
하지만, mtime은 파일내의 data를 마지막으로 변경한 날짜를 의미한다.(modified time)
최근 n일 이전에 액세스된 파일을 찾아준다.
+n은 n일 또는 그보다 더 오래 전의 파일을
-n은 오늘 부터 n일 전까지의 파일을
  n은 정확히 n일 전에 수정되었음을 의미한다.

# find / -cnewer /etc/passwd -print

-cnewer 파일명
'파일명' 부분에 적어준 파일보다 더 최근에 수정된 파일들을 찾아준다.
일부 UNIX버전에서는 -newer를 사용한다.

# find / -user nig0412 -print

-user 유저네임
'유저네임' 부분에 지정한 유저 소유의 파일을 찾아준다.

# find / -nouser -print

-nouser
  파일의 소유자가 없는 파일을 찾아 준다. 예를 들어 사용자를 삭제 했을 경우
  그 사용자가 이전에 만들어두었던 파일을 이 연산으로 찾을 수 있다.

# find / -group wheel -print

-group 그룹네임
  지정한 그룹네임에 해당되는 파일을 찾아 준다.

# find / -nogroup -print

-nogroup
  파일의 소유자의 그룹이 없는 파일을 찾아 준다.  

# find / -nouser -print -exec ls -l {} ;

-exec 명령어 {} ;
  find의 결과로 찾아낸 파일이나 디렉토리에 대해서 지정한 명령어를 실행(execute)한다.
  주의 할 것은 꼭 맨 뒤에 {} 와 ;사이를 한 칸 띄워야 한다.

# find $HOME -name '*.log' -type f -ok rm {} ;

-ok 명령어 {} ;
  exec 연산과 비슷하다. 다만 다른것은 그 명령어를 행하기 전에 사용자에게
  실행여부를 물어본다는 것이다. 따라서 좀 더 안전하다고 할 수 있겠다.

- (연산)
  연산자들을 그룹화한다. 면 다음과 같이 해야 한다.

  -o 연산자는 위에서 OR 임을 이미 살펴 보았다.

# find $HOME -atime -5 ( -name '*.c' -o '*.o' ) -print
  자신의 홈 디렉토리에 있는 파일들 중에서 c 나 o로 끝나는 파일들 중에서
  최근 5일 동안 액세스한 적이 없는 파일들을 모두 찾고 싶다.

-연산 -o 연산 또는 연산 -or 연산
  -o앞의 연산이나 -o뒤의 연산조건과 일치하는 것을 찾아준다(OR).
  만약 -o가 없다면  두 조건을 모두 만족시키는 것을 찾는다.(AND)
  
# find / ! -name '[a-z]*' -type f -print
  현재의 디렉토리에서 소문자로 시작하지 않는 파일들 찾는다.
  
- ! 또는 -not연산
  !뒤에 나오는 연산과 일치하지 않는 파일을 찾아 준다.

  /----------------------------------------------------------------------------/  
  조건1 -o   조건2   조건1이나 조건2 둘중 하나라도 일치하는 것은 출력
  조건1 -or  조건2  
    
  조건1 -a   조건2   조건1과 조건2 둘다 만족하는 것을 출력
  조건1 -and 조건2  
  
  ! 조건             조건식에 일치 하지 않는 것을 출력
  
  -not 조건          
  
  (조건)           조건들을 묶는 그룹화 역할
  /----------------------------------------------------------------------------/  

# find / -size 0 -print
  파일 크기가 0인 파일을 모두 찾는다.

# find . -size +1024k -exec ls -l {} ;
  현재 디렉토리 아래에서 파일 크기가 1메가바이트 이상인 파일을 모두 찾아서
  해당 파일에 대한 정보를 자세히 보고 싶다.
    
-size +n/-n/n[bckw]
  n뒤에 아무것도 쓰지 않으면 기본적으로 n블럭 크기의 파일을 찾는다.
  기본적으로 1블럭은 512바이트이다. 만약 n뒤에 c를 쓰면 character(쉽게
  말해서 byte) 단위가 되고, k를 쓰면 킬로바이트, w를 쓰면 위드 즉2바이트가
  된다. +은 지정한 크기 이상 -은 지정한 크기 이하를 나타낸다.
  
-depth :  이 연산은 별도로 지정할 필요은 없다. 서브디렉토리까지 찾으라는
           연산이지만 find 명령자체가 서브디렉토리까지 찾으니,불필요하다.
           항상 실행된다(Always true)

-mount :  해당 마운트된 곳만 찾는다.
           예를 들어 a.log를 찾을경우, a.log가 /(root)에 있다고는 아는데
           어디에 있는지 알수 없을 경우 / 에 가서 find를 사용할 경우
           이하의 F/S를 모두 검색하여, 시간을 많이 수행된다. 이러한 경우
           find / -mount -name a.log -print 하면 /(root)에서만 검색한다.

 

 

[출처]

http://akira74.namoweb.net/bbs/view.php?id=linux&page=2&sn1=&divpage=1&category=4&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=36