2012. 11. 11. 20:30ㆍOS/Linux
1. 현재 디렉토리( . ) 이하에 확장자가 .html( -name "*.html" ) 인 파일만 ( -type -f )
find . -name "*.html" -type f -ls
2. 파일 크기
# 파일 크기가 300KB 이상( -size +300k )인 파일만
# (호스팅되는 홈피내에 큰 사이트의 파일이 있는지 찾을 때 유용)
find . -size +300k -ls
# 파일 크기가 500bytes 이하( -size -500c )인 파일만
find . -size -500c -ls
3. 수정일
# 수정한지 20일 이상( -mtime +20 )된 파일과 디렉토리
find . -mtime +20 -ls
# 수정한지 20일 이상된 파일만
find . -mtime +20 -type f -ls
# 수정한지 20일 이상된 파일만 삭제 ( -exec rm {} \; )
# (정기적으로 20일이 지난 파일을 삭제할 때 유용)
find . -mtime +20 -type f -ls -exec rm {} \;
# 수정한지 3일 이내( -mtime -3 )의 파일만 (백업할 때 유용)
find . -mtime -3 -type f -ls
# 수정한지 30분 이내( -mmin -30 )의 파일만
find . -mmin -30 -type f -ls
4. 퍼미션 및 파일 소유
# 파일시스템 전체( / )에서 SUID/SGID가 설정된 모든 파일 목록을 얻음
find / -type f \( -perm -04000 -o -perm -02000 \) -ls
# 소유자가 없는 파일 목록을 얻음 (사용자는 이미 삭제했는데, 파일이 남은 경우)
find / -nouser -o -nogroup
5. 출력 형식 지정
# 출력 형식을 printf로 만들어서 (출력 결과를 다른 프로그램에서 받아서 쓸 때 유용)
# %h = 경로, %f = 파일명, %k = KB, %s = Bytes
# 형식 : <경로/파일명> <파일크기KB>
find . -printf "%h/%f \t %kKB \n"
... 생략 ...
./public_html/phps/icon/type/pcx.gif 4KB
./public_html/phps/icon/type/ra.gif 4KB
./public_html/phps/icon/type/sound.gif 4KB
./public_html/phps/icon/type/text.gif 4KB
# 형식 : <경로/파일명> <파일크기Bytes>
find . -printf "%h/%f \t %sKB \n"
... 생략 ...
./public_html/phps/icon/type/movie.gif 912Bytes
./public_html/phps/icon/type/mp3.gif 958Bytes
./public_html/phps/icon/type/pcx.gif 897Bytes
./public_html/phps/icon/type/ra.gif 903Bytes
./public_html/phps/icon/type/sound.gif 932Bytes
6. 홈페이지 포팅할 때 퍼미션 안 맞는 경우 유용한 것
# 확장자가 .htm* .gif, .js, .css 인 것만 퍼미션을 644(rw-r--r--)로
find . -name "*.htm*" -o -name "*.gif" -o -name "*.js" -o -name "*.css" -exec chmod 644 {} \;
# 파일은 퍼미션을 644로
find . -type f -exec chmod 644 {} \;
# 디렉토리는 퍼미션을 701로
find . -type d -exec chmod 701 {} \;
# 하위의 모든 퍼미션을 바꾸지 않고 depth를 지정하여 제한을 둘 때
# 옵션 : -maxdepth 숫자 (1=현재디렉토리만, 2=현재디렉토리 포함하여 한단계 하위디렉토리까지만)
find . -maxdepth 1 -type d -exec chmod 701 {} \;
※ -maxdepth는 -type나 -perm 등의 조건연산자가 아닌 옵션이다.
따라서 조건연산자보다 먼저 사용해야한다. (다른 명령처럼 옵션을 먼저쓰는 것으로 이해하면 됨)
find . -type -d -maxdepth 1 과 같이 사용하는 것은 옳지 않다.
[예제 1] 2009가 포함된 파일을 찾는다. 단 파일명이 디렉토리에 해당되면 해당 디렉토리 이하는 찾지 않는다.
$ find (전체 보기)
./
./check/check_list_2008_12.php
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2007_10_mobile
./2008_01_highlight
./2008_01_highlight/view.pl
./2008_01_highlight/view.sh
./2009_03_MSIE8
./2009_03_MSIE8/get_MSIE8.sh
./2009_05_apache
./2009_05_game
./2009_05_game/2009_05.log
$ find . -name "*2009*" -prune
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2009_03_MSIE8
./2009_05_apache
./2009_05_game
./2009_05_game/ 디렉토리 이하에 2009_05.log 파일이 있지만, -prune옵션으로 해당 디렉토리 이하는 찾지 않았다.
7. find명령에서 특정 디렉토리 제외하고 찾기
[예제 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" (보다 정확한 표현)
==========================================================================
추가 옵션
# -type
b : block device file
c: character device file
d: directory
p : named pipe
f: regular file
l:symbolic link
s:socket
# pattern
-name 파일명 파일명으로 검색
-size 크기로 검색
-exec 명령 {}\; 검색된 결과에 대해서 지정한 명령을 적용
-user 사용자명 사용자명 소유의 파일을 검색
-amin n n분 이전에 접근한 파일
-atime n n*24시간 이전에 접근한 파일
-ctime n n*24시간 이전에 파일의 상태가 변경된 파일
-mtime n n*24시간 이전에 파일의 내용이 변경된 파일
-empty 크기가 0인 일반 파일 또는 디렉토리
-name 파일명 : 찾고자 하는 파일의 이름을 정한다. 와일드 카드도 가능하다.
-perm 모드 : 파일 권한(permission)이 일치되는 것을 찾는다. 원하는 권한은 ls로 볼 수 있는 형태와 같이 지정한다.
-links : 특정 개수의 링크를 가진 파일을 찾는다. 물음표 부분에 링크의 숫자를 표기한다.
-size : 파일의 크기가 일치하는 것을 탐색한다. 파일 크기는 블록단위로 물음표 부분에 지정한다. 한 블록은 512바이트로 내정되어 있지만 블록 숫자 뒤에 단위로 k자를 붙이면 1키로바이트 크기의 블록 숫자로 간주된다.
-user 사용자 : 파일 사용자의 ID에 따라서 검색한다. 로그인 이름이나 번호 모두가 가능하다.
-exec 명령 : 원하는 검색 조건에 맞는 파일을 찾으면 명시된 명령을 실행한다. 명령의 끝은 \;을 사용하여 끝낸다. find가 검색해낸 파일의 이름을 인수로 사용하고 싶다면 그 위치에 {}를 사용한다.
-newer 파일 : 어떤 파일보다 최근에 갱신된 모든 파일을 검색한다.
'OS > Linux' 카테고리의 다른 글
디렉토리별 하드디스크 사용량 확인 (0) | 2012.11.11 |
---|---|
리눅스 chkconfig 옵션 정리 (0) | 2012.11.11 |
리눅스 find 명령어의 활용 (0) | 2012.11.11 |
리눅스 기본 명령어 모음 (0) | 2012.11.11 |
부팅 옵션이 잘못되어 내용의 복구가 필요할 때 (0) | 2012.11.11 |