[쉘스크립트] 오래된 백업 파일 삭제하기
백업스크립트로 데이터를 백업할때 디스크용량이 꽉 차는것을 방지하기 위해 보통은 스크립트 상단에 오래된 백업 파일 또는 디렉토리를 삭제하도록 합니다.
하지만 오래된 디렉토리를 삭제할 경우 그 안의 내용은 지워지지만 디렉토리 자체는 날짜가 갱신되어 (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
'프로그래밍 > BASH SHELL' 카테고리의 다른 글
정규표현식 연속된 문자 검색 (0) | 2023.06.02 |
---|---|
[ShellScript] 로그 파일 실시간 감시 및 마지막행 처리 방법 (0) | 2023.03.29 |
쉘스크립트 rsync 실행시 끝에 \#015 문자가 붙는 경우 조치방법 (0) | 2023.01.11 |
[Shell Script] MySQL 테이블 별로 백업 하기 (0) | 2022.09.08 |
쉘스크립트 수 비교하기 (0) | 2021.06.10 |