인생사는 이야기
[Linux] find 명령어를 사용한 파일 정리 본문
안녕하세요 타이거범 입니다.
find 라는 명령어에 대해서 알아 보도록 하겠습니다. 그리고 find 명령어로 할 수있는 일들에 대해서 알아 보도록 하겠습니다.
root#> find --help
사용법 : find [경로...] [수식]
default path is the current directory; default expression is -print
expression may consist of: operators, options, tests, and actions:
operators (decreasing precedence; -and is implicit where no others are given):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
positional options (always true): -daystart -follow -regextype
normal options (always true, specified before other expressions):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xdev -ignore_readdir_race -noignore_readdir_race
tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
-cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
-ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
-wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
-used N -user NAME -xtype [bcdpfls]
-context CONTEXT
actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;
좀더 자세히 알아 보기위하시면
root#> man find
옵션-type pattern 형식이 pattern인 것.
b : block device file, c: character device file, d: directory
p : named pipe, f: regular file, l:symbolic link, s:socket
-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 파일 : 어떤 파일보다 최근에 갱신된 모든 파일을 검색한다.
자, 이제 그럼 find 명령어로 할 수 있는 것들을 알아 볼까요?
find 명령어 이름만 봐도 알듯이 무언가를 찾을때 쓰는 명령어 입니다.
무엇을 찾을까요?? 바로 파일 또는 디렉토리 입니다.
어떻게 사용하는지 한번 보시죠.
[root@localhost /]# find /* -name "tigerbum"
/home/tigerbum
[root@localhost /]#
위에 처럼 저렇게 파일을 찾을 수있습니다.
좀 더 응용하자면 -exec 를 사용 할 수 있는데요
-exec [COMMAND] 커멘드 부분에 특정 명령어를 사용 할 수있습니다.
[root@localhost /]# find /* -name "tigerbum" -exec ls -al {} \;
-rw-r--r-- 1 root root 0 5¿ù 19 01:36 /home/tigerbum
[root@localhost /]#
이것은 동일한 명령어에 뒤에 -exec ls -al {} \; 붙임으로서 ls -al의 기능을 실행 하도록 한 것입니다.
본인이 원하는 명령어를 사용하여 입맛에?? 맞게 잘 응용하셔서 사용하시면 될 듯합니다.;;;
본 포스트 제목과 맞게 이제 불필료한 파일 정리에 대해서 알아 보도록 하겠습니다.
[옵션]
-ctime n n*24시간 이전에 파일의 상태가 변경된 파일
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the -fol-
low option is in effect, unless the symbolic link is broken.
If you want to search for symbolic links when -L is in effect,
use -xtype.
s socket
D door (Solaris)
=======================================================================================
[root@localhost /]# find /home -type f -ctime -1 // -1은 하루가 안된 파일을 말한다.
/home/tigerbum
[root@localhost /]# find /home -type f -ctime +1 // +1은 하루이상 된 파일을 말한다.
/home/clusterssh-3.28/config.log
/home/clusterssh-3.28/install-sh
/home/clusterssh-3.28/THANKS
/home/clusterssh-3.28/config.status
/home/clusterssh-3.28/Makefile.in
/home/clusterssh-3.28/missing
/home/clusterssh-3.28/configure
/home/clusterssh-3.28/clusterssh-48x48.png
/home/clusterssh-3.28/Makefile.am
/home/clusterssh-3.28/README
/home/clusterssh-3.28/NEWS
/home/clusterssh-3.28/src/Makefile.in
[root@localhost /]#
위에 명령어와 rm 명령어를 사용 하여 삭제 하도록 하겠습니다.
[root@localhost /]# find /home -type f -ctime +15 -exec rm -rf {} \;
이렇게 입력하면 /home 폴더 밑에 생성된 파일 중 15일이 지난 파일은 삭제 되는 것입니다.
쉘 스크립트로 작성해 볼까요?
[root@localhost /]# vi rmday15.sh
#!/bin/bash
find /home -type f -ctime +15 -exec rm -rf {} \;
저장하고 종료
crontab 을 이용하여 스케줄 실행을 하도록 하겠습니다.
[root@localhost /]# crontab -e
* 1 * * * /rmday15.sh // 파일 스크립트 경로 넣어주시면 됩니다.
이렇게 하고 저장하면 매일 1시에 실행하게 되겠죠??
※ 주의 하실것은 {} \;
요부분 띄어 쓰기 주의하세요!!!
띄어쓰기 틀리면 에러 납니다!!
※ log 압축 (하루 지나면 gz 압축)
find /log -name "*.*" -mtime +1 -print -exec gzip -9 '{}' \; > /tmp/log_zip.log
'IT > Linux' 카테고리의 다른 글
[Linux] 리눅스 파일 압축 해제 (0) | 2012.06.15 |
---|---|
[Linux] USB 마운트 하기 (0) | 2012.06.15 |
[Linux] clusterssh (0) | 2012.04.28 |
[Linux] 리눅스 호스트네임(hostname) 변경 (2) | 2012.04.27 |
[Linux] 리눅스 로그(Log) 단어,시간 단위 확인 하기, grep (4) | 2012.04.26 |