shell腳本備份
創建備份腳本
backup.sh
#!/bin/sh #$# 參數個數#提示說明if [ $# -lt 3 ]; thenecho "=============================================="echo "Usage: $0 ( commands ... )" echo "commands:" echo "example:" echo " > $0 bakDir bakAllName oriDirOrFile" echo " bakDir:備份文件件" echo " bakAllName:完整備份的名稱" echo " oriDirOrFile:源文件或者文件夾"echo "==============================================" exit -1fi#將參數賦值給變量 = 兩邊不能有空格bakdir="$1"bakName="$2"bakAllName="$2.tar.gz"oriDirOrFile="$3"#保存天數 默認7天超過指定天數重新 全量備份if [ -n $4 ];then bakDays=7else bakDays=$4fiecho $bakAllNameecho $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 fifiecho "--------start-bak---------"echo $zlecho "$bakdir"#使用tar差量打壓縮包tar "$zl" -czvf $bakdir $oriDirOrFile
創建任務調度
創建可執行文件
touch execBakUp.shchmod u+xrw execBakUp.sh
添加內容
編輯任務調度crontab -e
秒 時 日 月 周0 02 * * * sh /opt/execBakUp.sh >> $(date "+%Y-%m-%d".log)
每天凌晨 2點 執行execBakUp.sh
說明
參數說明:
增量備份:
tar -cvzf text.tar.gz /bak -N i_time
i_time是時間點
獲取文件時間:
ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答