본문 바로가기
창고/Backup_2013_0121

find 사용법

by 가능성1g 2011. 8. 22.
반응형


예전에 한번 올렸던것 같은데-_-;;
그간 사용하면서 메모해 놓은 find 사용법 정리임..

- find 찾기

$ find /home/jylee -newer myfile  특정 파일 이후 수정파일 찾기

$ find . -name '*.tmp' -exec rm {} \;
{} find 에서 찾은 파일을 의미
명령을 끝낸다는 의미 의 ; 앞에 \ 을 붙인다.

연결 명령어로  NOT, AND, OR 사용 가능
! NOT
-o OR
-a AND

$ find /tmp \( ! -user jylee \)
-- /tmp 밑에 소유자가 jylee 가 아닌것 찾기
( 를 특수문자로 해석하지 않게 앞에 \ 를 입력

$ find / \( -type d -a -user jylee \)

-- 파일 타입이 디렉토리이고 소유자가 jylee 인 파일 찾기

$find / \(-name a.out -o -name '*.o' \)-atime +7 -exec rm {}\;

-- 이름이 a.out 이거나 *.o 인 파일이  일주일동안 사용하지 않은 파일을 지운다.

*. find 이용하여 특정일자 이후의 수정파일 찾기

1. 특정일자의 파일을 생성한다.
#2009 년 7월 10일 9시 파일 생성
touch -t 200907010900 /JCL/start

2. 위의 파일을 기준으로 생성된 파일 검색
find . -newer /JCL/start - print

2_1. 위의파일 기준으로 class 파일을 제외하고 파일 검색
find . ! \( -type d -path './WEB-INF' -prune \) -newer start -print

*. 특정 디렉토리 제외 하고 찾기

[예제 1] 2009가 포함된 파일을 찾는다. 단 파일명이 디렉토리에 해당되면 해당 디렉토리 이하는 찾지 않는다.

$ find . -name "*2009*" -prune

[예제 2] ./foo/bar 디렉토리는 제외하고, *.txt 파일을 찾아라.

$ find . ! \( -path './foo/bar' -prune \) -name "*.txt"
$ find . ! \( -type d -path './foo/bar' -prune \) -name "*.txt" (보다 정확한 표현)

[예제 3] ./foo/bar 디렉토리와 ./coffeenix/temp 디렉토리는 제외하고, *.bak 파일을 찾아라.

$ find . ! \( \( -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak"
$ find . ! \( \( -type d -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak" (보다 정확한 표현)

[예제 4] ./2008로 시작하는 디렉토리는 제외하고, .*.bak 파일을 찾아라.

$ find . ! \( -path './2008*' -prune \) -name "*.bak"
$ find . ! \( -type d -path './2008*' -prune \) -name "*.bak" (보다 정확한 표현)

3. 현재폴더만으로 제한해서 검색하기

$ find . -path "./*" -prune -type f (현재폴더가 아닌것은 제외하고 파일만 찾기)


===================================추가적인 find 활용===================================

find 명령어 활용법

* / 는 최상위 디렉터리를 뜻함. 만약 찾고자 하는 디렉터리가 있다면 그걸로 대체

- 파일 이름에 foobar 가 들어간 파일 찾기
   find / -name "foobar" -print

- 특정 사용자(foobar) 소유의 파일을 찾기
   find / -user foobar -print | more

- 최근 하루동안에 변경된 파일을 찾기
   find / -ctime -1 -a -type f | xargs ls -l | more

- 오래된 파일(30일 이상 수정되지 않은 파일) 찾기
   find / -mtime +30 -print | more

- 최근 30일안에 접근하지 않은 파일과 디렉터리를 별도의 파일로 만들기
   find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.txt

- 하위 디렉터리로 내려가지 않고 현재 디렉터리에서만 검색하기
   find . -prune ...

- 퍼미션이 777 인 파일 찾기
   find / -perm 777 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾기
   find / -perm -2 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾아 쓰기 권한을 없애기
   find / -perm -2 -print | xargs chmod o-w
      또는
   find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 사용자이름과 그룹이름이 없는 파일 찾기
   find / ( -nouser -o -nogroup ) -print | more

- 빈 파일(크기가 0 인 파일) 찾기
   find / -empty -print | more
      또는
   find / -size 0 -print | more

- 파일 크기가 100M 이상인 파일을 찾기
   find / -size +102400k -print | xargs ls -hl

- 디렉터리만 찾기?
   find . -type d ...

- root 권한으로 실행되는 파일 찾기
   find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템은 검색하지 않기
   find / -xdev ...

- 파일 이름에 공백이 들어간 파일 찾기
   find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾기
   find / -name ".*" -print | more

- *.bak 파일을 찾아 지우기
   find / -name "*.bak" -exec rm -rf {} ;

- *.bak 파일을 찾아 특정 디렉터리로 옮기기
   mv `find . -name "*.bak"` /home/bak/

- 여러개의 파일에서 특정 문자열을 바꾸기
   find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} ;

- 특정 권한이 없는 파일 찾기 (게스트가 리드권한 없는 파일 찾기)

   find . ! \( -perm -g+r \) -print

반응형