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.pswp.cn/news/213933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213933.shtml
英文地址,請注明出處:http://en.pswp.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…