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: --------------------------------------------------------------- Example $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 "--------------------------------------------------------------- Full_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 "--------------------------------------------------------------- Add_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 "--------------------------------------------------------------- Add_Backup System Files Bakcup Successfully!" #如果以上命令没问题则提示成功 fi fi } Full_Backup;Add_Backup
执行结果:
如果需要测试全备份,可以把系统时间改为周日,或者把脚本中周日进行全备份改为当前时间。
下一篇:
Tomcat服务器的概念与安装