以下的脚本最主要的一条命令就是:  

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下的文件增加了,我们则进行增量备份如下:

tar -g /tmp/snapshot -czvf /tmp/2017_add_sysbak.tar.gz /data/sh/ ----再次利用原来的快照增量备份,只是备份增加的那部分文件


以下的脚本要实现的是规范的备份,可以将其加入到crontab中指定在每晚凌晨执行,例如:

crontab -e

0  0 * * * /bin/bash /data/sh/toolscript/auto_system_backup.sh  /var/log/  >>/tmp/backup.log ###每天凌晨执行备份日志目录并追加相关日志信息


-----------------------------脚本auto_system_backup.sh---------------------------------------------------------------------------------

#!/bin/bash

#automatic backup linux system files

#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 ##调用函数,代码的执行顺序是函数最后执行,先执行前面的两个判断语句再调用函数处理

---------------------------------------------------------------------------------------------------------

以下是本人的测试信息:

wKioL1jjTUmhGOW1AAA1C5iEx0Y277.png-wh_50

最后提示的是增量更新成功,如果要进行完整 更新可以将系统时间修改到星期天,或者修改代码中的[ "$WEEK" -eq "7" ]为你当前系统的时间,再去执行该脚本。

wKioL1jjULngDknZAABcuEY-fwQ284.png-wh_50

可以看到上图中的备份文件/09/0002_system_backup.tgz周末9号的完整备份,04/update1549_system_backup.tgz周二4号的增量备份


注:以上的脚本可以根据您的实际需要进行更改,实现更多的功能。