您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關使用shell怎么實現周期差量備份文件夾,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
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怎么實現周期差量備份文件夾就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。