这是一个目录定期备份文件,通过MD5校验判断今天和昨天比较目录和文件是否有改动,如果没有则删除昨天的备份目录。减少磁盘空间的消耗。可能有些备份目录,特别大,我们一般指修改其中一类文件,我们可以选择指定的文件类型,对长期改动的文件进行备份。该脚本还可以做更多的改动,如加入函数,使用函数的方法去选择是否对指定类型文件进行备份。选择备份不是按天计算,可以精确到小时,当然要加上crontab。呵呵,这里要感谢一位博友aaao提供的MD5校验想法。
#!/bin/bash
#written by dqznn88
#maill: dqznn88@126.com
#date: 2014-09-23
#
DSTDIR="/backup/tomcat_$(date +%Y%m%d)/"
POSTFIX="xml"
md5_sum_dir="/backup/tomcat/sum/"
md5_in="${DIR}"
md5_new_sum_file="${md5_sum_dir}tomcat_md5_sum.$(date +%Y%m%d)"
md5_old_sum_file="${md5_sum_dir}tomcat_md5_sum_old"
#############################################################
# backup directory
# for DIRNAME in $(find $DIR -type d )
# do
# #echo "dirctory name is $DIRNAME"
# FULLDIR=${DIRNAME/$DIR/$DSTDIR}
# if [ ! -d $FULLDIR ];then
# mkdir -p $FULLDIR
# fi
# done
# echo "backup $DIR directory specified $POSTFIX"
##################################################################
if [ ! -d $DSTDIR ];then
cp -a $DIR $DSTDIR && echo "$DIR directory to $DSTDIR backup successfully"
################################################################
if [ ! -d ${md5_sum_dir} ];then
mkdir -p ${md5_sum_dir}
fi
find ${md5_in} | xargs -I {} md5sum {} >> $md5_new_sum_file 2>/dev/null && echo "directory md5 sum "
new_sum_ok=`md5sum -c ${md5_new_sum_file} 2>/dev/null | awk ‘$2~"OK"‘ |wc -l`
old_sum_ok=`md5sum -c ${md5_old_sum_file} 2>/dev/null | awk ‘$2~"OK"‘ |wc -l`
if [ ${old_sum_ok} == ${new_sum_ok} ];then
echo "because today and yesterday content is the same,delete yesterday centent!"
cp $md5_new_sum_file $md5_old_sum_file -r
rm -fr ${md5_in_yer} && rm -fr ${md5_new_sum_file} && echo "delete old file "
fi
##################################################################
#the first execute this script,create ‘md5_old_sum_file‘ file,afterwards,everytime change $DSTDIR directory backup ‘sum_file‘ file.
cp $md5_new_sum_file $md5_old_sum_file -r &>/dev/null下面是一些变量说明
md5_sum_dir MD5校验值存放的目录
md5_new_sum_file新生成的存放各个备份文件MD5值文件
md5_old_sum_file以前备份的MD5值文件
new_sum_ok 刚刚生成的MD5文件去校验备份的目标文件,记录有几个是检验ok的。
old_sum_ok 昨天生成的MD5文件去校验备份的目标文件,同时记录有几个是检验ok的,如果目标文件改动过,则检验结果肯定不是ok的,而且新生成和删除的文件,都会导致ok的个数不同。
if [ ${old_sum_ok} == ${new_sum_ok} ] 通过比对,检查文件是否改动,是否新增和删除文件。
解释一下这里为什么会有两个
cp $md5_new_sum_file $md5_old_sum_file -r 每次执行脚本,都会刷新MD5_old_sum_file 文件的信息,保持下次校验时一定是昨天的校验文件。事实上,执行了上面的cp,下面的cp一定不会执行。
如果你有更好的思路请给我留言。谢谢!!
本文出自 “小丁子” 博客,请务必保留此出处http://dqzshine.blog.51cto.com/8093967/1557277
原文地址:http://dqzshine.blog.51cto.com/8093967/1557277