美文网首页LINUX
shell周期差量备份文件夹

shell周期差量备份文件夹

作者: 秦时的明月夜 | 来源:发表于2019-12-04 13:28 被阅读0次

    shell脚本备份

    创建备份脚本
    backup.sh

    #!/bin/sh 
    #$# 参数个数
    #提示说明
    if [ $# -lt 3 ]; then
    echo "=============================================="
    echo "Usage:     $0 ( commands ... )"
      echo "commands:"
      echo "example:"
      echo "  > $0 bakDir bakAllName oriDirOrFile"
      echo " bakDir:备份文件件"
      echo " bakAllName:完整备份的名称"
      echo " oriDirOrFile:源文件或者文件夹"
    echo "=============================================="
      exit -1
    fi
    #将参数赋值给变量 = 两边不能有空格
    bakdir="$1"
    bakName="$2"
    bakAllName="$2.tar.gz"
    oriDirOrFile="$3"
    #保存天数 默认7天超过指定天数重新 全量备份
    if [ -n $4 ];then
        bakDays=7
    else
       bakDays=$4
    fi
    
    echo $bakAllName
    echo $bakdir
    #判断全量备份文件是否存在
    if [ ! -f "$bakdir$bakAllName" ];then
        #如果没有全量备份份文件
        echo "--------all-bak---------"
        bakdir=$bakdir$bakAllName
        zl=""
    else
        #已经备份了全量
        #获取全量备份的时间
        bakAllDate="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6`"
        #获取当前时间
        nowDate=`date "+%Y-%m-%d"`
        #算出时间差单位是秒
        senconds=$(($(date +%s -d $nowDate) - $(date +%s -d $bakAllDate)));
        #计算出天
        day=$(($senconds/60/60/24))
        #增量备份但是超过备份时间需要跟新全量的备份
        if [ $day -gt $bakDays ];then
            echo "备份时间已经超过备份周期了"
            bakdir=$bakdir$bakAllName
        else
            echo "还没超过备份周期"
            echo " temp-bak"
                #增量备份文件地址
                tempDir="$bakdir$bakName`date '+%m-%d'`.tar.gz"
                #获取全量备份文件的日期
                compareDate="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6`"
                echo "$compareDate"
                #获取全量备份文件的时间
                compareTime="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 7`"
                echo "$comcompareTime"
                #shell 格式转换成yyyy-MM-dd HH:mm:ss
                compareTime=`date -d $compareTime "+%F %T"`
                echo "$compareTime"
                #差量备份比较时间基准
                zl="-N "$compareTime""
                bakdir=$tempDir
        fi
    
    fi
    echo "--------start-bak---------"
    echo $zl
    echo "$bakdir"
    #使用tar差量打压缩包
    tar "$zl" -czvf $bakdir  $oriDirOrFile
    
    

    创建任务调度

    创建可执行文件

    touch execBakUp.sh
    chmod u+xrw execBakUp.sh
    

    添加内容

    sh backup.sh /opt/bak/ tomcatTest /home/oriDir 5
    /opt/bak/:你的备份需要放置的位置
    tomcatTest:你的备份名称
    /home/oriDir:需要备份的文件夹
    5:备份周期

    编辑任务调度

    crontab -e
    秒 时 日 月 周
    0 02 * * * sh /opt/execBakUp.sh >> $(date "+%Y-%m-%d".log)
    每天凌晨 2点 执行execBakUp.sh

    说明

    参数说明:

    $#:添加的参数个数。
    $1~$n:添加到Shell的各参数值
    $0:Shell本身的文件名
    $*$@:传递给脚本或函数的所有参数。

    增量备份:

    tar -cvzf text.tar.gz /bak -N i_time
    i_time是时间点

    获取文件时间:

    ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6
    ls --full-time text.txt:显示文件完整时间
    cut -d ' ' -f 6空格分隔 显示第6列

    相关文章

      网友评论

        本文标题:shell周期差量备份文件夹

        本文链接:https://www.haomeiwen.com/subject/wktlgctx.html