如下的腳本最主要的一條命令就是: linux
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} ##建立好的備份目錄中,執行備份命令,如下就是一個完整的命令例子:數組
tar -g /tmp/snapshot -czvf /tmp/2017_full_sysbak.tar.gz /data/sh ##第一次建立快照完整備份,將/data/sh目錄打包壓縮到/tmp/下並保存爲2017_full_sysbak.tar.gz,若是/data/sh下的文件增長了,咱們則進行增量備份以下:bash
tar -g /tmp/snapshot -czvf /tmp/2017_add_sysbak.tar.gz /data/sh/ ----再次利用原來的快照增量備份,只是備份增長的那部分文件ide
如下的腳本要實現的是規範的備份,能夠將其加入到crontab中指定在每晚凌晨執行,例如:函數
crontab -e測試
0 0 * * * /bin/bash /data/sh/toolscript/auto_system_backup.sh /var/log/ >>/tmp/backup.log ###天天凌晨執行備份日誌目錄並追加相關日誌信息spa
-----------------------------腳本auto_system_backup.sh---------------------------------------------------------------------------------日誌
#!/bin/bashorm
#automatic backup linux system filesblog
#author robin 2017-4-4
#define variable ##參數定義
SOURCE_DIR=( $* ) ##以數組的形式存放須要備份的目錄,執行腳本時須要手動指定
TARGET_DIR=/data/backup/ ##指定備份路徑
YEAR=`date +%Y` ##年參數,這些都是用於創建層級目錄
MONTH=`date +%m` ##月參數
DAY=`date +%d` ##日參數
WEEK=`date +%u` ##星期參數
A_NAME=`date +%H%M` ##時分參數
FILES=${A_NAME}_system_backup.tgz ##定義壓縮文件格式,也能夠壓縮爲別的tar.gz等格式
CODE=$? ##判斷是否有錯
#Juge the inter file exist ###這裏首先要判斷在執行腳本時有沒有指定參數,也就是要備份的目錄
if [ -z "$*" ];then #若是沒有指定參數則提示你
echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m" ##提示信息
exit
fi
#Determine Whether the Target Directory Exists ##註釋信息
if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then ##判斷當天的備份目錄是否存在
mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY ##建立該目錄
echo -e "\033[32mThe $TARGET_DIR Created Successfully! \033[0m" ##提示信息
#EXEC Full_Backup Function Command ##提示如下是完整備份函數
Full_Backup()
{
if [ "$WEEK" -eq "7" ];then ##這裏指定的是週末進行完整備份
rm -rf $TARGET_DIR/snapshot ##首先刪除掉原有本分目錄下的快照
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} ##這裏就是完整備份的命令,解釋一下${SOURCE_DIR[@]},這就是你須要指定的一個或者多個須要備份的目錄,以數組形式存在,例如:sh /date/auto_backup.sh /etc /home
[ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files Backup SuccessFully !\033[0m" ##提示信息,表示若是以上的命令都沒有問題則出現提示信息表示成功。下面一個函數也同樣
fi
}
#Perform incremental BACPUP Function Command ##提示下面是增量更新的函數
Add_Backup()
{
if [ "$WEEK" -ne "7" ];then ##這裏指定的是除開週末則進行增量更新
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf update$FILES ${SOURCE_DIR[@]} ##這條語句的差異與上面一條在於備份名字罷了
[ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup SuccessFully !\033[0m" ##也是提示信息
fi
}
sleep 3 ##延時3秒在繼續如下動做
Full_Backup;Add_Backup ##調用函數,代碼的執行順序是函數最後執行,先執行前面的兩個判斷語句再調用函數處理
---------------------------------------------------------------------------------------------------------
如下是本人的測試信息:
最後提示的是增量更新成功,若是要進行完整 更新能夠將系統時間修改到星期天,或者修改代碼中的[ "$WEEK" -eq "7" ]爲你當前系統的時間,再去執行該腳本。
能夠看到上圖中的備份文件/09/0002_system_backup.tgz週末9號的完整備份,04/update1549_system_backup.tgz週二4號的增量備份
注:以上的腳本能夠根據您的實際須要進行更改,實現更多的功能。