[쉘스크립트] 오래된 백업 파일 삭제하기

프로그래밍/BASH SHELL|2023. 1. 13. 09:31
반응형

백업스크립트로 데이터를 백업할때 디스크용량이 꽉 차는것을 방지하기 위해 보통은 스크립트 상단에 오래된 백업 파일 또는 디렉토리를 삭제하도록 합니다.

하지만 오래된 디렉토리를 삭제할 경우 그 안의 내용은 지워지지만 디렉토리 자체는 날짜가 갱신되어 (Access, Modify, Change) 삭제가 되지 않습니다.

이 경우 아래와 같이 조치가 가능합니다.

 

예) 20 으로 시작되는 날짜 디렉토리 중 30일이 초과된 디렉토리 삭제

 

1) 기존 방법

명령 : find /backup/20* -ctime +30 -exec rm -rf {} \;

결과 : 날짜가 오래된 디렉토리 내 파일은 삭제되지만 디렉토리는 남게됩니다.

 

2) 새 방법

디렉토리의 변경되지 않는 Birth 날짜와 현재 날짜를 비교하여 삭제

cd /backup
LIST=`stat -c %n" "%w 20* |sed -e 's/-//g' |awk {'print $1" "$2'}`
while read i j; do # i : Directory name, j : Birth date
    if [ $j -le `date +%Y%m%d --date '30 days ago'` ]; then
        rm -rf $i
    fi;
done <<< "$LIST"

 

* 참고

파일 또는 디렉토리의 날짜 확인

# stat 20230102
  File: 20230102
  Size: 30         Blocks: 0          IO Block: 4096   디렉토리
Device: 821h/2081d Inode: 1799764911  Links: 4
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-01-11 12:00:01.478938107 +0900
Modify: 2023-01-02 12:00:02.236334564 +0900
Change: 2023-01-02 12:00:02.236334564 +0900
 Birth: 2023-01-02 00:00:01.354856557 +0900

 

반응형

댓글()