Contents
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