文件定期自动备份脚本

这是一个目录定期备份文件,通过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一定不会执行。

如果你有更好的思路请给我留言。谢谢!!

时间: 2024-10-11 00:29:57

文件定期自动备份脚本的相关文章

设定MS SQL Server 2008定期自动备份

1.说明 SQL Server2008 本身具有定期自动备份功能,我们只需要通过简单的配置就可以实现非常简单高效的自动备份功能. 2.打开SQL Server代理服务 要实现自动备份功能,首先要保证SQL Server的"SQL Server(代理)"服务已经打开. 如果没有看到这个"SQL Server代理"节点,可通过如下方式打开 先找到开始菜单中的"Microsoft SQL Server 2008 R2",再在"配置工具&quo

SQL Server 2008如何创建定期自动备份任务(一)

我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份,下面我们将SQL SERVER 2008定期自动备份的方法分享给大家. 首先需要启动SQL Server Agent服务,这个服务如果不启动是无法运行新建作业的,点击"开始"–"所有程序"–"Microsoft SQL Server 2008"–"启动SQL Server Ma

Linux自动备份脚本

今天网上一个朋友问了我一个shell的题目,让我帮他做下.下面是题目以及解题思路. 题目: 写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天的日期命名的目录中例如(/var/backups/etc.20140809).并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录. 解答: [[email protected] scripts]# cat auto_bak.sh  #!/bin/bash # # This 

SQL Server 2008如何创建定期自动备份任务(二)_异地备份

准备: 局域网内的两台电脑.主电脑,备份电脑. 原理:通过数据库维护计划实现. 操作步骤: 一.在备份电脑和主电脑上中创建一个账户liuxh和密码123(自定义) 二.在备份电脑中创建备份用的文件夹backfile并将其共享给指定用户soft1_developer6. 如图: 1.选择用户 2.分配权限 以上上步骤是把文件夹开启共享.       其余步骤同SQL Server 2008如何创建定期自动备份任务,保存路径改成共享目录的文件夹目录.

实战:INNOBACKUPEX for mysql 5.6自动备份脚本

#backup.sh #!/bin/sh # # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设定来基于之前的全库备份进行增量备份 #[email protected] INNOBACKUPEX_PATH=innobackupex  #INNOBACKUPEX的命令 INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX_PATH  #INNOBACKUPEX的命令路径 #mysql目标服务器以及用户名和密码

Oracle自动备份脚本的实现

问题描述: Oracle自动备份脚本的实现. 错误提示1: Message file RMAN.msb not found Verify that Oracle_HOME is set properly ...... 错误原因: 自动执行的不能够识别相应的命令,需要在自动备份脚本中显式的声明Oracle的环境变量. 错误提示2: standard in must be a tty ...... 错误原因: 不能在cron使用su或者管道等操作,必须将su命令移动到相关的shell脚本中. 错误提

Linux自动备份脚本--解析

      由于上次做项目的时候,客户要求需要对系统状态做自动备份,当时觉得自己写得脚本实在是不够上档次,就开始在网上搜索各种比较好的脚本,现在找到了一个还挺不错的脚本,与大家一起来解析分享一下.其实我第一遍看的时候中间有一小部分没有弄懂,觉得里面的语法真的是用的恰到好处,不过还是稍稍修改了一点. #说明使用的是bash语法来写脚本 #!/bin/bash #设置日志文件,前提建好了/backup/log目录 LogFile=/backup/log/`date +"%Y-%m"`.lo

windows下oracle数据库自动备份脚本

1.根据日期自动生成 Oracle 备份文件 @echo off echo 正在备份Oracle数据库,请稍等...... exp userid='用户名/密码@SID' file=D:\bak\res_%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=D:\bak\res_%date:~0,4%%date:~5,2%%date:~8,2%.log owner=res echo 任务完成! 2.根据日期时间分秒自动生成 Oracle 备份文件 @echo off

Windows环境下Oracle数据库的自动备份脚本

批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据库的自动备份脚本 echo  1. 使用当前日期命名备份文件. echo  2. 自动删除7天前的备份. echo ================================================ ::以“YYYYMMDD”格式取出当前时间. set BACKUPDATE=%date