当前位置: 首页 > article >正文

Linux定时循环备份指定文件或文件夹,每月永久备份留1份

备份需求:每天完成一次指定文件的备份,压缩后存放到指定目录

问题:备份时间长了以后占用空间较大,浪费存储,实际历史备份意义不大,并不需要永久保存。但是如果直接删除可能导致无法恢复历史状态的数据。

解决思路:
第一步:每天备份时用当天时间的日期的天数命名备份文件,每次备份时覆盖上个月同一天的备份文件,这样每天都有备份,最多留存31份备份,不会无限增加备份浪费空间。

第二步:考虑到历史备份意义不大,但又不能完全删除,所以每个月指定日期(例如每月01号)完成一次永久备份,一年备份量12份,占用较少空间,且可以恢复到N个月以前的状态。

脚本下载:https://download.csdn.net/download/feng_601/88598945

功能:每天定时循环备份指定文件或文件夹,压缩后存放到指定目录,每天循环覆盖上月的备份,最多保留31份,永久备份会单独存放,每月01号永久备份一次

脚本文件名:backup_file.sh(可自定义)

使用方法:sh backup_file.sh [参数1] [参数2] [参数3]
## 参数1:允许空,要备份目标文件或文件夹
## 参数2:允许空,备份后存放位置目录
## 参数3:允许空,默认值是01


#!/bin/bash
## 功能:定时循环备份指定文件或文件夹,压缩后存放到指定目录,每天循环覆盖上月的备份,最多保留31份,永久备份会单独存放,每月01号永久备份一次
## 脚本文件名:backup_file.sh
## 使用方法:sh backup_file.sh [参数1] [参数2] [参数3]
## 参数1:允许空,要备份目标文件或文件夹
## 参数2:允许空,备份后存放位置目录
## 参数3:允许空,默认值是01
##
####################  配置信息(可动态传参,支持默认值)  ##############################
# 需要备份的目标文件、或目标文件夹目录
# 支持默认值,支持传第1个参数
backupfile=${1:-"/data/folder"}  #/data/test.txt
echo 需要备份的目标文件:$backupfile
#
# 配置文件及归档的目标目录。
# 支持默认值,支持传第2个参数
backup_dir=${2:-"/data/backup/mrdocpro"}
# 需要永久固定备份的日期,例如01 表示每月01号完成永久备份(不删除不覆盖)
# 支持默认值,支持传第3个参数
forever_day=${3:-"01"}  #默认值01
##################### 其他默认值配置 #################################################
#
# 备份后压缩包名通过日期区分。
today=$(date +%Y%m%d)
# 获得当天日期:比如01
day=$(date +%d)

#按日备份存放目录
backup_dir_day=$backup_dir/$day
#永久备份存放目录
backup_dir_forever=$backup_dir/forever
#
echo 备份后归档存放路径:$backup_dir_day
#日志文件
logdir=$backup_dir/logs
logfile=$logdir/$0_runlog.log
echo 日志文件:$logfile
#####################################################################################
#
#echo 备份路径:$backup_dir_day
####################  初始化  ##############################################
if [ ! -d "$logdir" ]; then
        echo $(date +%Y-%m-%d-%T) "$logdir" 需要创建日志目录:
        mkdir -p $logdir
        echo $(date +%Y-%m-%d-%T) "$logdir" 日志目录已创建 created >> $logfile
fi
#如果文件夹不存在,创建文件夹
if [ ! -d "$backup_dir_day" ]; then
        mkdir -p $backup_dir_day
        echo $(date +%Y-%m-%d-%T) "$backup_dir_day" 文件夹已创建 created
        echo $(date +%Y-%m-%d-%T) "$backup_dir_day" 文件夹已创建 created >> $logfile
fi
#
#####################################开始备份#######################################
###############每日备份,最多保留31份,一般保留30天的备份文件,循环覆盖#############
#如果备份目标是文件夹
if [ -d "$backupfile" ]; then
        backedfilename=$backup_dir_day/${backupfile##*/}_${day}.tar.gz
        #压缩文件,如果文件名已存在则直接覆盖
        echo $(date +%Y-%m-%d-%T) 备份压缩文件夹目录 $backupfile 到 $backedfilename
        echo $(date +%Y-%m-%d-%T) 备份压缩文件夹目录 $backupfile 到 $backedfilename  >> $logfile
        tar -czf $backedfilename $backupfile 2>/dev/null
#如果备份目标是文件
elif [ -f "$backupfile" ]; then
        backedfilename=$backup_dir_day/${backupfile##*/}_${day}.tar.gz
        echo $(date +%Y-%m-%d-%T) 备份压缩文件 $backupfile 到 $backedfilename
        echo $(date +%Y-%m-%d-%T) 备份压缩文件 $backupfile 到 $backedfilename  >> $logfile
        tar -czf $backedfilename $backupfile 2>/dev/null
else
        echo $(date +%Y-%m-%d-%T) 压缩文件"$backupfile" 不存在或不受支持!!
        echo $(date +%Y-%m-%d-%T) 压缩文件"$backupfile" 不存在或不受支持!! >> $logfile
fi
#压缩文件,如果文件名已存在则直接覆盖
#echo $(date +%Y-%m-%d-%T) 压缩文件 $backupfile 到 $backedfilename
#echo $(date +%Y-%m-%d-%T) 压缩文件 $backupfile 到 $backedfilename  >> $logfile
#tar -czf $backedfilename $backupfile 2>/dev/null
#
###############每月永久备份,永久保留不会被覆盖、不会删除##########################
#如果是每月1号,则额外存放一份
if  [ $day -eq ${forever_day} ] && [ -f "$backedfilename" ]; then
        if  [ ! -d "#$backup_dir_forever" ]; then
                mkdir -p $backup_dir_forever
        fi
        # 完成一次永久备份
        cp $backedfilename ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gz
        echo $(date +%Y-%m-%d-%T)  完成第一次永久备份copy复制 $backedfilename 到  ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gz
        echo $(date +%Y-%m-%d-%T)  完成第一次永久备份copy复制 $backedfilename 到  ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gz  >> $logfile

        #
        backedfilename=$backup_dir_day/${backupfile##*/}_${today}.tar.gz
        echo $(date +%Y-%m-%d-%T) 完成第二次永久备份新建压缩 $backupfile 到 $backedfilename
        echo $(date +%Y-%m-%d-%T) 完成第二次永久备份新建压缩 $backupfile 到 $backedfilename  >> $logfile
        tar -czf $backedfilename $backupfile 2>/dev/null

fi
################################################################################
#删除历史文件(因为按名称已经覆盖,无需删除)


http://www.kler.cn/a/159281.html

相关文章:

  • MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解
  • Servlet快速入门
  • 【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试
  • qml OpacityMask详解
  • 管道符、重定向与环境变量
  • 亚博microros小车-原生ubuntu支持系列:1 键盘控制
  • Linux基础命令(测试相关)
  • Qt篇——QChartView实现鼠标滚轮缩放、鼠标拖拽平移、鼠标双击重置缩放平移、曲线点击显示坐标
  • 【Polar靶场WEB签到】
  • ES通过抽样agg聚合性能提升3-5倍
  • 【算法思考记录】力扣2477. 到达首都的最少油耗【JavaScript,深度优先搜索】
  • flink运行报Exception in thread “main“ java.lang.IllegalStateException
  • Linux 基础知识整理(三)
  • 【开源】基于Vue.js的公司货物订单管理系统
  • Android Studio的笔记--三元表达式、布尔运算符、与() 或(||) 非(!)
  • 一、技术体系结构
  • 圈子社交系统:打破时间与空间的限制。APP小程序H5三端源码交付,支持二开!
  • Python:可以做什么?
  • Go中的延时执行魔法:深入浅出defer用法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • HTML5 基础总结
  • 周周爱学习之Redis重点总结
  • 程序员必看:查券助手返利机器人是如何实现的?
  • 每日一题(LeetCode)----字符串--反转字符串 II
  • 15、pytest的fixture调用fixture
  • 一部,即全部,十年超越之作一加12售价4299元起