Linux/Basic
[Shell Script] 특정 폴더만 삭제해 봅니다.
Tongchun
2019. 3. 12. 18:21
업무 기록을 위해 Posting 합니다.
웹 서버 배포 후 특정 폴더만 지워야 할 일이 있었습니다.
조건은 아래와 같습니다.
1. Storage 폴더 (로그 기록을 위한 root 폴더)에는 여러 파일과 폴더가 있다.
2. 특정 패턴의 폴더를 지워야 한다.
3. 생성 날짜(수정 날짜)를 기준으로 최근의 10개는 남겨야 하며 11번째 이후 것만 삭제한다.
(오래된 것 삭제하기)
우선 아래와 같이 폴더가 있습니다.
특정 시간에 ngle_ 로 시작되는 폴더에 파일이 쌓이게 됩니다.
이걸 먼저 생성된 순서대로 10개는 남기고 11번째부터 삭제해야 합니다.
위 Directory의 폴더와 파일을 시간 순서대로 보내 아래와 같습니다.
sh는 remove.sh 파일에 있고 Shell Script는 아래와 같습니다.
#!/bin/bash BACKUP_PATH='/home/tongchun/Storage' PATTEN="ngle_*" MAX_COUNT=10 CUR_COUNT=`/usr/bin/find $BACKUP_PATH -name "$PATTEN" -type d -print | /usr/bin/wc -l` echo 'There are' $CUR_COUNT 'backup folders.' if [ $CUR_COUNT -gt $MAX_COUNT ] then DEL_COUNT=`expr $CUR_COUNT - $MAX_COUNT` echo 'There is' $DEL_COUNT 'folder to delete.' for i in $(seq 1 $DEL_COUNT) do echo `/usr/bin/find $BACKUP_PATH -name "$PATTEN" -type d -printf '%T+ %p\n' | sort | head -n 1` rm -rf `/usr/bin/find $BACKUP_PATH -name "$PATTEN" -type d | sort | head -n 1` done else echo 'No folder to delete.' fi
실행하면 아래와 같이 패턴에 맞는 폴더 중 가장 오래된 1개가 삭제됩니다.
$ sh remove.sh There are 11 backup folders. There is 1 folder to delete. 2019-03-12+04:55:47.9604497650 /home/tongchun/Storage/ngle_201903091205
참고하시기 바랍니다.