Linux,Unix,BSD

변경된 소스만 압축하여 백업하기

채윤아빠 2019. 5. 16. 10:04
728x90
반응형



변경된 소스만 압축하여 백업하기 문제점

기존에 최근에 변경된 소스만 정기적으로 백업을 하기 위하여 tar 및 find 명령을 이용하여 다음과 같은 스크립트를 작성하여 사용했었습니다. 그런데, 최근에 소스 및 이미지 파일이 한꺼번에 많은 양이 올라왔을 때, 아래 스크립트가 다음과 같이 정상적으로 수행되지 않았었습니다.

#!/bin/bash -e

SRC_DATE=`date -d '1 day ago' '+%Y%m%d'`
DEL_DATE=`date -d '4 day ago' '+%Y%m%d'`
FOLDER_NAME=kernels
BACKUP_DIR=/root/src

rm -f $BACKUP_DIR/$FOLDER_NAME-$DEL_DATE.tgz
cd /home
tar cfz $BACKUP_DIR/$FOLDER_NAME-$SRC_DATE.tgz $( find ./$FOLDER_NAME -type f -mtime -1  | grep -v .git | grep -v logs | grep -v .vim | grep -v .bash | grep -v .otf | grep -v .woff )

직접 백업 스크립트를 실행해 보면, 다음과 같은 오류가 발생하며 정상적으로 백업이 수행되지 않았습니다.

$ /root/monitor/src.sh

/root/monitor/src.sh: line 10: /bin/tar: Argument list too long

tar 명령으로 최근에 수정된 파일 목록을 find 명령으로 받는 부분에서 find 명령의 수행 결과가 너무 커서 파라미터 길이의 제한을 초과하여 오류가 발생하였습니다.


해결 방안

다음과 같이 최근에 변경된 파일 목록을 임시 파일로 생성한 이후에, 변경된 파일 목록이 있는 임시 파일을 이용하여 다음과 같이 tar로 묶었더니 아무런 문제 없이 정상적으로 잘 수행되었습니다.

$ find ./kernels -type f -mtime -2  | grep -v .git | grep -v logs | grep -v .vim | grep -v .bash | grep -v .otf | grep -v .woff > target.log

$ tar cvfz kernels-20190515.tgz -T target.log

최종적으로 기존에 백업 작업을 처리하던 스크립트를 다음과 같이 수정하였습니다.

#!/bin/bash -e

SRC_DATE=`date -d '1 day ago' '+%Y%m%d'`
DEL_DATE=`date -d '4 day ago' '+%Y%m%d'`
FOLDER_NAME=kernels
BACKUP_DIR=/root/src

rm -f $BACKUP_DIR/$FOLDER_NAME-$DEL_DATE.tgz
cd /home
find ./$FOLDER_NAME -type f -mtime -1  | grep -v .git | grep -v logs | grep -v .vim | grep -v .bash | grep -v .otf | grep -v .woff > target-$SRC_DATE.log
tar cfz $BACKUP_DIR/$FOLDER_NAME-$SRC_DATE.tgz -T target-$SRC_DATE.log
rm target-$SRC_DATE.log


참고자료