don't stop believing

[Shell Script] 특정 폴더만 삭제해 봅니다. 본문

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

참고하시기 바랍니다.


Comments