인생사는 이야기

[Linux] find 명령어를 사용한 파일 정리 본문

IT/Linux

[Linux] find 명령어를 사용한 파일 정리

채율파파 2012. 5. 19. 02:12
반응형

 

 

안녕하세요 타이거범 입니다.

 

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


 

반응형
Comments