3.46. 目录定时备份

3.46.1. 对指定目录定时备份

#!/usr/bin/env bash
#usage:xxx
#scripts_name:xxx.sh
# author:xiaojian

#例如,设计一个Shell程序,在每月1日0:00备份并压缩/etc目录的所
#有文件及子目录。备份文件存放在/root/etcbak目录里,且备份文件的名
#称按如下格式:YYMMDD_etc.tar.gz,其中YY表示年份,MM表示月
#份,DD为日。
DIR="/root/subbak"

# 捕获ls的内容后赋值变量
DIRNAME=`ls /root |grep subbak`

echo $DIRNAME

# 如果ls内容为空,就创建subbak目录
if test -z $DIRNAME; then
    mkdir $DIR
fi

cd $DIR

# 获取年月日
YY=`date +%y`
MM=`date +%m`
DD=`date +%d`

BACKETC=${YY}${MM}${DD}_etc.tar.gz

# 使用tar对目录进行压缩
tar zcvf $BACKETC /etc
echo "File backup finished!"


# 0  0 1 *  *  /usr/bin/env bash   05.对指定目录定时备份.sh

3.46.2. 连续对多个目录逐个备份

#!/usr/bin/env bash
#usage:xxx
#scripts_name:xxx.sh
# author:xiaojian

#例如,编写Shell程序,对系统中的配置文件进行备份,并设定每50
#分钟执行一次。配置文件通常保存在conf目录中,在备份之前首先需要
#建立备份目录列表,然后通过while循环完成备份。定时备份需要编写
#任务定时器。此例中将用到while、tar、crontab等语句

DIR="/tmp/conf"
i=0
# 从根目录开始查找名为conf的目录,并将查找到的结果保存到文件file中
find / -name conf > file

if test -d "$DIR"; then
    echo "${DIR} is exists.."
else
    mkdir $DIR
    echo "${DIR} is create ."
fi

while read LINE; do
    DIRS=$LINE
    BACKUP="${DIR}/backup${i}.tar.gz"
    # 利用tar命令完成压缩,变量DIRS定义了被压缩目录,BACKUP为压缩后的文件i标志累加
    tar -zcvf $BACKUP $DIR
    # 循环变量的值增加1,每次循环加1
#    i=$(($i+1))
#    i=$[i+1]
    let i=$i+1

done <file      #while从文件file中读入数据,while循环体结束


# 0/50 * * * * /usr/bin/env bash backup_much_dir.sh