#!/bin/sh


###################################
##### freudd's backup script ######
###################################
### E-mail: freudd at orgio.net ###
###################################




###################################### 사용법 ############################################
# 밑에 있는 parameter를 세팅 후 사용하세요. #
# DESTINATION_DIR => 백업한 파일이 위치할 경로 #
# (맨 끝에 $DATE는 백업한 날짜로 디렉토리를 만드니 원하시면 붙이시고 아니면 말고... ^^) #
# #
# SOURCE_DIR => 압축을 해서 백업할 목록 #
# NSOURCE_DIR => 압축 안하고 그냥 백업할 목록 #
# EXCLUDE => 백업시 제외될 파일이나 디렉토리 목록 #
# FILES => 그 외 그냥 카피할 기타 여러 파일들 나열 #
##########################################################################################

# 압축할 경우에는 기본적으로 bzip을 사용합니다.
# 선택할 수 있게 할려 했는데 귀찮아서요... 흐흐~~
# 로그파일은 백업받은 곳에 Backup.log 입니다.
# umask 는 0077 로 세팅했습니다. (사용자 권한만...)





# 연도 월 일 시 분
DATE=`date '+%Y%m%d%H%M'`

############################# Setting This parameter #####################################
##########################################################################################

DESTINATION_DIR="/ftp/pub2/Backup/$DATE"
EXCLUDE_LIST=${DESTINATION_DIR}/Exclude_List
EXCLUDE_LIST_CANDIDATE=${DESTINATION_DIR}/Exclude_List.candidate
LOG=${DESTINATION_DIR}/Backup.log

SOURCE_DIR="/boot /var/www /etc /root" # with compress
NSOURCE_DIR="/home/freudd" # with no-compress
EXCLUDE="/home/freudd/starsuite6.1 /home/freudd/download /home/freudd/temp" # for Exclude
FILES="/usr/X11R6/lib/X11/ko/app-defaults/Hanterm"
##########################################################################################


umask 0077

mkdir ${DESTINATION_DIR}
touch ${EXCLUDE_LIST_CANDIDATE} # 안 만들어주면 제외 목록이 없는 SOURCE를 Backup 할 때 Error!!




#### Function ################################################################################
Build_Exclude_List () {

echo ${EXCLUDE} | sed 's/ /\
/' > ${EXCLUDE_LIST} # 빈칸을 뉴라인 문자로

for i in `cat ${EXCLUDE_LIST} | grep ${DIR}`
do
# 첫번째 sed 명령어에서 이중인용부호
echo ${i} | sed "s;$DIR;;" | sed 's;/;\./;' >> ${EXCLUDE_LIST_CANDIDATE}
done

}





echo "********* Starting Backup ***********"



##### Main ####################################################################################
if [ -n "${SOURCE_DIR}" ]; then

#### Directory Backup -> compress
for DIR in `echo ${SOURCE_DIR}`
do
Build_Exclude_List
cd ${DIR}
# tar cvjplf `echo $DIR | sed 's/\///'`.tar.bz2 $DIR
echo -n "**** tar -cvjpl -f ${DESTINATION_DIR}/`basename ${DIR}`.tar.bz2 " \
| tee -a ${LOG}
echo "--exclude-from=${EXCLUDE_LIST_CANDIDATE} . ****" \
| tee -a ${LOG}
tar -cvjpl -f ${DESTINATION_DIR}/`basename ${DIR}`.tar.bz2 \
--exclude-from=${EXCLUDE_LIST_CANDIDATE} . \
| tee -a ${LOG}

done

cat /dev/null > ${EXCLUDE_LIST_CANDIDATE} # 밑에 루프를 실행하기 위해 초기화
fi





if [ -n "${NSOURCE_DIR}" ]; then

#### Directory Backup -> no-compress
for DIR in `echo ${NSOURCE_DIR}`
do
mkdir ${DESTINATION_DIR}/`basename ${DIR}`
Build_Exclude_List
cd ${DIR}
echo -n "**** tar -cl -f - --exclude-from=${EXCLUDE_LIST_CANDIDATE} . | " \
| tee -a ${LOG}
echo "( cd ${DESTINATION_DIR}/`basename ${DIR}` && tar xpvf - ) ****" \
| tee -a ${LOG}
tar -cl -f - --exclude-from=${EXCLUDE_LIST_CANDIDATE} . | \
( cd ${DESTINATION_DIR}/`basename ${DIR}` && tar xpvf - ) \
| tee -a ${LOG}

done
fi




#### Misc Files Backup -> no-compress
echo "**** cp ${FILES} ${DESTINATION_DIR} ****" | tee -a ${LOG}
cp ${FILES} ${DESTINATION_DIR} | tee -a ${LOG}


#### remove exclude list file
rm -f ${EXCLUDE_LIST} ${EXCLUDE_LIST_CANDIDATE}



echo "********* Ending Backup ***********"


exit 0

 

출처:KLDP(http://kltp.kldp.org/stories.php?story=03/07/10/5755334)

Posted by 큰바우
: