首页 电脑 电脑学堂 查看内容

一个关于文件名备份的脚本

2011-10-25 23:07 616 0

摘要:   #说明:这个备份脚本只是一个基于文件名的备份  #完全备份:就是完全备份  #增量备份:备份与前一次的差异  #差异备份:每次备份都是与原始的备份比较的结果  #!/bin/bash  #back...
关键词: 备份 DAYTIME BACKUPDIR 文件 完全 echo 增量 ALLDIR file list

  #说明:这个备份脚本只是一个基于文件名的备份  #完全备份:就是完全备份  #增量备份:备份与前一次的差异  #差异备份:每次备份都是与原始的备份比较的结果  #!/bin/bash  #backup script  #思想:  #完全备份:若没有进行过完全备份,则使用find命令将$SRCDIR下不是目录(!d)的文件名重定向输出到$ALLDIR/$DAYTIME/file.list.all  #差异备份:将$SRCDIR下文件和完全备份时的日期文件$BACKUPDIR/time.all进行新旧比较,若前者比后者新则进行备份(同上!d文件)  #增量备份;将$SRCDIR下文件和完全备份时的日期文件$BACKUPDIR/time.up进行新旧比较,若前者比后者新则进行备份(同上!d文件)  #判定当前用户是否是root  if [ "$USER" == "root" ] ; then  echo ""  else  echo "滚蛋!"  exit 2  fi  #每次运行此脚本时产生/tmp/back.pid文件,主要用于判定当前进程是否是唯一的!  if [ ! -e "/tmp/back.pid" ]; then  echo $$ > /tmp/back.pid  else  echo "已经再运行,马上退出!"  exit 2  fi  #备份的主体,/data目录下的所有文件到/tmp/backup, tar.gz  BACKUPDIR=/tmp/backup  ALLDIR=/tmp/backup/all  DIFFDIR=/tmp/backup/diff  UPDIR=/tmp/backup/up  SRCDIR=/data  #定制时间格式  DAYTIME=$(date +"%Y%m%d%H%M%S")  #创建备份用的目录  #测试是否存在$BACKUPDIR,若不存在则创建$BACKUPDIR  [ ! -d $BACKUPDIR ] && mkdir $BACKUPDIR  #用来创建完全备份  function all() {  if [ ! -f $BACKUPDIR/time.all ]; then  #完全备份的同时,创建用来比较的时间文件  echo $DAYTIME > $BACKUPDIR/time.all  echo $DAYTIME > $BACKUPDIR/time.up  echo $DAYTIME > $BACKUPDIR/time.diff  #进入$SRCDIR,创建$ALLDIR/$DAYTIME文件  #将$SRCDIR下不是d(目录)的文件备份为/$ALLDIR/$DAYTIME/file.list.all  #将文件/$ALLDIR/$DAYTIME/file.list.all打包压缩为$ALLDIR/$DAYTIME/$DAYTIME.tar.gz  cd $SRCDIR  mkdir -p $ALLDIR/$DAYTIME  #完全备份  find ! -type d > $ALLDIR/$DAYTIME/file.list.all  tar -zcv -f $ALLDIR/$DAYTIME/$DAYTIME.tar.gz -T $ALLDIR/$DAYTIME/file.list.all  #给备份的文件增加时间标记  sed -i "s/$/ $DAYTIME/" $ALLDIR/$DAYTIME/file.list.all  echo "完整备份结束"  else  echo "已在"`tail -n 1 $BACKUPDIR/time.all`"执行过完整备份"  fi  }  #用来创建差异备份  function diff() {  #判断是否完全备份过,如果没有,则执行完全备份  [ ! -f $BACKUPDIR/time.all ] && echo "没有完全备份,将执行完全备份!" && all && rm -fr /tmp/back.pid && exit 0  cd $SRCDIR  mkdir -p $DIFFDIR/$DAYTIME  #查找存在差异的需要备份的文件  find -newer $BACKUPDIR/time.all ! -type d > $DIFFDIR/$DAYTIME/file.list.diff  #如果文件内容为空,则不进行差异备份!  if [ -s $DIFFDIR/$DAYTIME/file.list.diff ] ;then  tar -zvc -f $DIFFDIR/$DAYTIME/$DAYTIME.tar.gz -T $DIFFDIR/$DAYTIME/file.list.diff  sed -i "s/$/ $DAYTIME/" $DIFFDIR/$DAYTIME/file.list.diff  echo "差异备份结束"  else  echo "没有变化,不需要差异备份!"  rm -fr $UPDIR/$DAYTIME  fi  }  #用来创建增量备份  function up() {  [ ! -f $BACKUPDIR/time.all ] && all && rm -fr /tmp/back.pid && exit 0  cd $SRCDIR  mkdir -p $UPDIR/$DAYTIME  #用来做增量备份的参考文件是time.up  find -newer $BACKUPDIR/time.up ! -type d > $UPDIR/$DAYTIME/file.list.up  #如果文件内容为空,则不进行增量备份!  if [ -s $UPDIR/$DAYTIME/file.list.up ] ;then  #更新参考文件的时间  echo $DAYTIME > $BACKUPDIR/time.up  tar -zcv -f $UPDIR/$DAYTIME/$DAYTIME.tar.gz -T /$UPDIR/$DAYTIME/file.list.up  sed -i "s/$/ $DAYTIME/" $UPDIR/$DAYTIME/file.list.up  echo "增量备份结束"  else  echo "没有变化,不需要增量备份"  rm -fr $UPDIR/$DAYTIME  fi  }  #要求交互式提出要求,是all,diff,up  case $1 in  all)  all  ;;  diff)  diff  ;;  up)  up  ;;  *)  echo "只接受all,diff,up"  ;;  esac  #退出时,删除锁定文件  rm -fr /tmp/back.pid
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部