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" ]; thenecho $(date +%Y-%m-%d-%T) "$logdir" 需要创建日志目录:mkdir -p $logdirecho $(date +%Y-%m-%d-%T) "$logdir" 日志目录已创建 created >> $logfile
fi
#如果文件夹不存在,创建文件夹
if [ ! -d "$backup_dir_day" ]; thenmkdir -p $backup_dir_dayecho $(date +%Y-%m-%d-%T) "$backup_dir_day" 文件夹已创建 createdecho $(date +%Y-%m-%d-%T) "$backup_dir_day" 文件夹已创建 created >> $logfile
fi
#
#####################################开始备份#######################################
###############每日备份,最多保留31份,一般保留30天的备份文件,循环覆盖#############
#如果备份目标是文件夹
if [ -d "$backupfile" ]; thenbackedfilename=$backup_dir_day/${backupfile##*/}_${day}.tar.gz#压缩文件,如果文件名已存在则直接覆盖echo $(date +%Y-%m-%d-%T) 备份压缩文件夹目录 $backupfile 到 $backedfilenameecho $(date +%Y-%m-%d-%T) 备份压缩文件夹目录 $backupfile 到 $backedfilename  >> $logfiletar -czf $backedfilename $backupfile 2>/dev/null
#如果备份目标是文件
elif [ -f "$backupfile" ]; thenbackedfilename=$backup_dir_day/${backupfile##*/}_${day}.tar.gzecho $(date +%Y-%m-%d-%T) 备份压缩文件 $backupfile 到 $backedfilenameecho $(date +%Y-%m-%d-%T) 备份压缩文件 $backupfile 到 $backedfilename  >> $logfiletar -czf $backedfilename $backupfile 2>/dev/null
elseecho $(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" ]; thenif  [ ! -d "#$backup_dir_forever" ]; thenmkdir -p $backup_dir_foreverfi# 完成一次永久备份cp $backedfilename ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gzecho $(date +%Y-%m-%d-%T)  完成第一次永久备份copy复制 $backedfilename 到  ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gzecho $(date +%Y-%m-%d-%T)  完成第一次永久备份copy复制 $backedfilename 到  ${backup_dir_forever}/${backupfile##*/}_${day}_${today}.tar.gz  >> $logfile#backedfilename=$backup_dir_day/${backupfile##*/}_${today}.tar.gzecho $(date +%Y-%m-%d-%T) 完成第二次永久备份新建压缩 $backupfile 到 $backedfilenameecho $(date +%Y-%m-%d-%T) 完成第二次永久备份新建压缩 $backupfile 到 $backedfilename  >> $logfiletar -czf $backedfilename $backupfile 2>/dev/nullfi
################################################################################
#删除历史文件(因为按名称已经覆盖,无需删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 启动加载器解析

计时器介绍 启动加载器实战 实现方式1 实现CommandLineRunner接口重写run方法通过Order进行排序 示例: Component Order(1) public class FirstCommandlineRunner implements CommandLineRunner {Overridepublic void run(String... args) throws Exception {System.out.pr…

一篇上手机器学习

一、上手机器学习的几个阶段 上手机器学习,第一步当然是看完我的这篇文章啦~,然后就按以下步骤来就可以了: 学习Python编程语言:Python是一种易于学习的高级编程语言,广泛应用于机器学习领域。你可以通过学习Python的…

第三节、项目支付功能实战-微信支付平台接入流程,小程序账号注册、商户注册

简介 本篇介绍小程序的注册流程、商户平台的注册流程、以及小程序和商户平台如何进行绑定。 微信小程序注册 由于项目中使用了小程序进行支付,所以首先来注册小程序。小程序注册网站如下:小程序注册地址 小程序账号注册 1、链接页面点击“前往注册”…

carla安装中的问题

1、carla carla安装完后,需要使用python调用API去更换地图,增加车辆等 使用Python调用API过程中可能会报错: 报错1:carla API(Carla包)版本不对 **解决方法:**需要将这个目录下的三个文件拷…

数学建模算法

算法部分 1. 评价类模型2. TOPSIS3. 线性规划4. 聚类分析5. 预测模型6. 拉伊达准则(对异常值进行剔除)7. 数据拟合8. 图论代码练习1. 模拟圆周率2. 斐波那契数列3. 四只鸭子落在一个圆中概率4. 方程2: y" uy y,初值y(0) 1,y(0) 0 算法讲解 matlab代码大全 1. 评价类模型…

【Python】修改pip 默认安装位置

使用pip安装的时候,一般是默认安装在c盘里的。这样做很容易会让c盘的文件堆满。那么如何让pip安装的包放入d盘呢? 查看pip默认安装的位置 在cmd里输入python -m site,这里可以看到,安装包会默认下载到c盘中 从这里可以看到&am…

【Spring教程15】Spring框架实战:详解解读AOP的工作流程和AOP的核心概念

目录 1 AOP工作流程2 AOP核心概念 欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文…

如何使用cpolar+Inis在Ubuntu系统快速搭建本地博客网站公网可访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

AspNetCore 中使用 Knife4jUI 更加友好的Swagger界面

🚀介绍 aspnetcore.knife4j是一个基于.NET Core平台的Swagger UI库,它提供了API文档的生成和管理功能。这个库的前身是swagger-bootstrap-ui,在Java项目中广泛使用,由于其优秀的界面和易用性被许多开发者所推崇。现在&#xff0c…

LV.13 D2 开发板启动流程 学习笔记

一、开发板启动过程 EMMC:相当于电脑的外存,断电不丢失 开发板上电后首先运行SOC内部iROM中固化的代码(BL0),这段代码先对基本的软硬件环境(时钟等...)进行初始化,然后再检测拨码开关位置获取启动方式,然后再将对应存储…

基于SSM+MySQL学生宿舍管理系统的设计与实现(源码+数据库+文档)

摘 要 近年来,随着计算机技术的不断发展和运用,许多实际问题都得到了较好地解决。随着现代社会对企业经营的需求日益增长,企业的无纸办公也逐渐得到了推广。本学生宿舍管理系统的设计开发,目标就是解决宿舍管理复杂的人为管理&a…

PHP变量用{}的使用方法

{} 可以将变量名称作为一个整体使用 "666666".$id."888888"; //可以简化为如下 "666666{$id}888888"; //当然$id也可以用$ids[$id] 参考: PHP 大括号{} 的使用_php 函数放在{}-CSDN博客

[23] Self-conditioned Image Generation via Generating Representations

[paper | code] 用生成对象本身作为控制信号,实现无条件图像生成。训练阶段。Step1:用预训练模型(例如:Moco v3)提取生成对象的特征编码;Step2:基于特征编码,训练一个扩散模型RDM&a…

pycharm手动安装包

1.下载对应的包 TTS PyPI 2.手动解压,找到文件放到pycharm对应项目的lib文件夹中 以TTS包为例,找到下载并解压的包中的2个文件,一个名称一个info结尾 3.放到项目的lib文件夹中 eg:路径;C:\doc\myProject\speaker\venv…

前端知识(十四)——浅谈用户体验测试的主要功能

用户体验(User Experience,简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望,提高用户满意度,用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能,以及它在产品开发过程中的重要性 …

Android View的 getHeight 和 getMeasuredHeight 的区别

前言 先简单复习一下Android View 的 绘制顺序: 1、onMeasure(测量),先根据构造器传进来的LayoutParams(布局参数),测量view宽高。 2、onLayout(布局),再根…

SQL进阶 | 自连接

概述 SQL的自连接是指在一个SQL表中,使用自身表格中的实例进行联接并查询的操作。自连接通常使用别名来标识一个表格,在自连接中,表格被视为两个不同的表格,并分别用不同的别名来标识。然后,在WHERE子句中使用这些别名…

oracle异常:ORA-03297:文件包含在请求的 RESIZE 值以外使用的数据

出现这个问题&#xff0c;主要是在对表空间扩容的时候&#xff0c;扩容的大小<实际数据文件大小 1、扩容的语句 alter database datafile D:\APP\ADMINISTRATOR\ORADATA\ORCL\USER.DBF resize 2G; 2、若何确定扩容大小是否比实际文件大 根据路径找到文件&#xff0c;查看…

二十、FreeRTOS之Tickless低功耗模式

本节需要掌握以下内容&#xff1a; 1&#xff0c;低功耗模式简介&#xff08;了解&#xff09; 2&#xff0c; Tickless模式详解&#xff08;熟悉&#xff09; 3&#xff0c; Tickless模式相关配置项&#xff08;掌握&#xff09; 4&#xff0c;Tickless低功耗模式实验&…

自定义异步任务管理器和线程

import com.lancoo.common.utils.Threads; import com.lancoo.common.utils.spring.SpringUtils;import java.util.TimerTask; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;/*** 异步任务管理器* * author lancoo*/ public c…