文件定期自動備份腳本

    這是一個目錄定期備份文件,通過MD5校驗判斷今天和昨天比較目錄和文件是否有改動,如果沒有則刪除昨天的備份目錄。減少磁盤空間的消耗。可能有些備份目錄,特別大,我們一般指修改其中一類文件,我們可以選擇指定的文件類型,對長期改動的文件進行備份。該腳本還可以做更多的改動,如加入函數,使用函數的方法去選擇是否對指定類型文件進行備份。選擇備份不是按天計算,可以精確到小時,當然要加上crontab。呵呵,這裏要感謝一位博友aaao提供的MD5校驗想法。

#!/bin/bash
#written  by  dqznn88
#maill:   [email protected]
#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一定不會執行。

        如果你有更好的思路請給我留言。謝謝!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章