Linux备份文件——shell脚本

备份策略为每周一至周六执行增量备份,周日执行全备份。使用 tar 实现。

#!/bin/bash
#Automatic Backup Linux System Files
#By Author Book_Wu
#Define Variables 参数定义
SOURCE_DIR=($*) #以数组的形式存放需要备份的目录,执行脚本时需要手动指定
TARGET_DIR=/home/jialing/learn/data/backup/ #指定备份路径
YEAR=`date +%Y` #年
MONTH=`date +%m` #月
DAY=`date +%d` #日
WEEK=`date +%u` #礼拜
NAME=`date +%H%M` #时分
FILES=${NAME}_system_backup.tgz #定义压缩文件格式
CODE=$? #判断是否有错
if [ -z $SOURCE_DIR ]; then #如果没有指定参数则提示
    echo -e "Please Enter a File or Directory You Need to Backup:\n---------------------------------------------------------------\nExample $0 /boot /etc ..."
    exit
fi
#Determine Whether the Target Directory Exists 判断当天的备份目录是否存在
if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ]; then
    mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY #不存在则创建目录
    echo "This $TARGET_DIR Created Successfully!" #提示信息
fi
#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 -cvzf $FILES `echo ${SOURCE_DIR[@]}` #完整备份的命令,echo前面不是单引号,${SOURCE_DIR[@]}是指定的一个或多个需要备份的目录
        [ "$CODE" == "0" ]&&echo -e "---------------------------------------------------------------\nFull_Backup System Files Backup Successfully!" #如果以上命令没有问题则提示成功
    fi
}
#Perform incremental BACKUP Function Command 以下是增量备份
Add_Backup(){
    cd $TARGET_DIR/$YEAR/$MONTH/$DAY;
    if [ -f $TARGET_DIR/$TEAR/$MONTH/$DAY/$FILES ]; then #判断增量备份文件是否存在
        read -p "$FILES Already Exists, overwrite confirmation yes or no? : " SURE #存在则询问是否重新创建
        if [ $SURE == "no" -o $SURE == "n"]; then #不需要则退出
            sleep 1; exit 0
        fi
#Add_Backup Files System
        if [ "$WEEK" -ne "7" ];then #重新创建,除周日进行增量备份
            cd $TARGET_DIR/$YEAR/$MONTH/$DAY; tar -g $TARGET_DIR/snapshot -czvf $$_$FILES `echo ${SOURCE_DIR[@]}` #与上条命令的区别是文件名不同,$$是程序的进程号
            [ "$CODE" == "0" ]&&echo -e "---------------------------------------------------------------\nAdd_Backup System Files Backup Successfully!" #如果以上命令没问题则提示成功
        fi
    else #文件不存在,增量备份
        if [ "$WEEK" -ne "7" ];then
            cd $TARGET_DIR/$YEAR/$MONTH/$DAY; tar -g $TARGET_DIR/snapshot -cvzf $FILES `echo ${SOURCE_DIR[@]}` #与上条命令的区别是文件名不同
            [ "$CODE" == "0" ]&&echo -e "---------------------------------------------------------------\nAdd_Backup System Files Bakcup Successfully!" #如果以上命令没问题则提示成功
        fi
    fi
}
Full_Backup;Add_Backup

执行结果:

 

 如果需要测试全备份,可以把系统时间改为周日,或者把脚本中周日进行全备份改为当前时间。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值