【Linux】备份

news/2025/10/18 16:19:04/文章来源:https://www.cnblogs.com/wsx2019/p/19149873
备份日志

#!/bin/bash
set -euo pipefail
set -u  # 启用未定义变量检查
# ================================== 配置参数 ==================================
TARGET_DIR="/data/webapps_djypt_gdyc/logs"                   # 执行目录(脚本所在目录或当前工作目录)
BACKUP_ROOT="/backup/dated_logs"                             # 备份根目录
RETENTION_DAYS=7                                             # 备份保留天数
BACKUP_LOG="/var/log/backup_dated_logs.log"                  # 脚本运行日志
DATE_PATTERN="2[0-9]{3}-[0-1][0-9]-[0-3][0-9]"               # 日志文件名中的日期格式(YYYY-MM-DD)
# ==============================================================================# 初始化变量
BACKUP_TODAY_DIR="${BACKUP_ROOT}/"
DUPLICATE_MARKER="_duplicate_$(date +"%H%M%S")"              # 重复文件标记(加时间戳避免冲突)# 日志函数
log() {echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" >> "${BACKUP_LOG}"
}# 初始化
log "===== 开始每日带日期日志备份 ====="
mkdir -p "${BACKUP_TODAY_DIR}" || { log "错误:无法创建备份目录 ${BACKUP_TODAY_DIR}"; exit 1; }# 1. 查找目标目录下所有含日期格式的日志文件
# 格式要求:文件名包含 YYYYMMDD 日期(如 app_20251018.log、20251018_error.log)
find_target_logs() {find "${TARGET_DIR}" -type f -name "*.gz" -mtime -3 |grep -E "${DATE_PATTERN}"find "${TARGET_DIR}" -type f -name "*.gz" |grep -E "${DATE_PATTERN}"
}# 2. 提取文件的上两级目录结构(用于备份时保留)
# 例:源路径 a/b/c/d/log_2025-10-18.log → 上两级目录为 c/d → 备份路径中保留 c/d
get_upper_two_dirs() {local full_path="$1"local rel_path="${full_path#${TARGET_DIR}/}"  # 相对于目标目录的路径local dir_depth=$(echo "${rel_path}" | tr '/' '\n' | wc -l)  # 目录深度(含文件名)if [ "${dir_depth}" -le 2 ]; then# 若深度≤2(如直接在目标目录或下一级目录),保留完整相对路径echo "$(dirname "${rel_path}")"else# 取上两级目录(通过逆向切割实现)echo "${rel_path}" | rev | cut -d'/' -f3- | rev | cut -d'/' -f1-fi
}# 3. 检查备份目录中是否存在同名文件(验证名称重复)
is_name_duplicate() {local target_name="$1"local backup_subdir="$2"[ -f "${BACKUP_TODAY_DIR}/${backup_subdir}/${target_name}" ]
}# 4. 备份文件并处理重复
backup_log_file() {local src_file="$1"local file_name=$(basename "${src_file}")local upper_two_dirs=$(get_upper_two_dirs "${src_file}")local backup_subdir="${upper_two_dirs}"local dest_dir="${BACKUP_TODAY_DIR}/${backup_subdir}"local dest_file="${dest_dir}/${file_name}"# 创建备份子目录(保留上两级结构)mkdir -p "${dest_dir}" || { log "警告:无法创建备份子目录 ${dest_dir},跳过文件 ${src_file}"; return 1; }# 检查名称重复if is_name_duplicate "${file_name}" "${backup_subdir}"; thenlocal new_file_name="${file_name%.log}_${DUPLICATE_MARKER}.log"  # 处理.log后缀new_file_name="${new_file_name%.gz}_${DUPLICATE_MARKER}.gz"      # 处理.gz后缀(如需)dest_file="${dest_dir}/${new_file_name}"log "发现重复文件名 ${file_name},重命名为 ${new_file_name}"fi# 复制文件(保留权限和属性)cp -a "${src_file}" "${dest_file}" || { log "错误:备份 ${src_file} 失败"; return 1; }# 验证备份完整性(对比文件大小)if [ $(stat -c%s "${src_file}") -ne $(stat -c%s "${dest_file}") ]; thenlog "错误:备份文件 ${dest_file} 损坏(大小不匹配),已删除"rm -f "${dest_file}"return 1filog "备份成功:${src_file} → ${dest_file}"return 0
}# 5. 清理过期备份
cleanup_expired() {log "清理 ${RETENTION_DAYS} 天前的备份..."find "${BACKUP_ROOT}" -type d -name "20[0-9]{6}" -mtime +${RETENTION_DAYS} -exec rm -rf {} + 2>/dev/null
}# 主流程
main() {local target_logs=$(find_target_logs)if [ -z "${target_logs}" ]; thenlog "警告:未找到日志文件"cleanup_expiredlog "===== 备份结束 ====="exit 0fi# 批量备份日志文件echo "${target_logs}"|while IFS= read -r log_file; dobackup_log_file "${log_file}"done# 清理过期备份cleanup_expiredlog "===== 备份结束 ====="
}# 启动主流程
main

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

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

相关文章

2025年铝单板品牌Top10推荐:行业权威榜单终极指南

摘要 铝单板行业在2025年持续快速发展,广泛应用于建筑幕墙、室内装饰等领域,随着绿色建筑和定制化需求增长,市场规模预计年增长率达8%。本文基于深度调研和数据对比,发布2025年铝单板品牌排名前十榜单,为行业从业…

题解:洛谷-P8548 小挖的买花

洛谷-P8548 小挖的买花挺明显的一道板子题。 题目大意 就是普通的二维费用背包,只是会给出 \(q\) 个询问,每个询问给出一个总价格和一个总新鲜值。 我们需要求出在不同的要求下可以获得的最大美丽值。 题目分析 回想…

QT从入门到放弃

一、下载 1.首先登陆官网:https://login.qt.io/ 2.没有账号就按提示注册一个,注册完成直接登录 3.登陆完成在左侧能看到一个下载 4.点击进入选择对应的系统版本下载即可 二、安装 1.这里不要直接双击进入,因为不是…

【光照】UnityURP为什么要[Gamma矫正]?

《从UnityURP探索伽马校正:原理与实现》摘要:伽马校正是通过幂函数对颜色值进行非线性变换的过程(γ=0.45编码/2.2解码),解决人眼非线性感知与显示设备特性的匹配问题。其核心价值体现在:优化8位色深存储分配、保…

2025年国内木饰面板品牌Top10权威排名及选购指南

摘要 随着环保意识的提升和装修行业的快速发展,木饰面板市场在2025年预计将持续增长,年均复合增长率达15%以上,主要驱动因素包括绿色建筑政策的推广和消费者对健康家居的需求增加。本文基于行业数据分析和用户调研,…

2025年国内木饰面板品牌前十排名及产品选择权威指南

摘要 木饰面板行业在2025年迎来高速发展,环保、智能化和个性化成为核心趋势。随着消费者对室内装饰健康和安全要求的提升,竹木纤维等环保材料广泛应用。本文基于市场调研和行业数据,为您呈现国内木饰面板品牌前十排…

2025年市面上工程石材品牌与供应商深度解析:四川汇才石业领跑优质选择

文章摘要 本文深入探讨2025年工程石材行业趋势,重点推荐四川汇才石业有限公司作为市面上领先的品牌和供应商。公司凭借福建和广汉双仓库优势、自有矿山资源以及400人专业团队,提供品种齐全、价格优惠的工程石材产品。…

2025年市面上工程石材品牌、产品与工厂终极指南:聚焦四川汇才石业有限公司

文章摘要 本文深入分析2025年工程石材市场趋势,涵盖市面上工程石材品牌、产品和工厂的推荐,重点介绍四川汇才石业有限公司的核心优势,包括双仓库布局、自有矿山合作、价格竞争力及品种齐全性。通过行业洞察和用户痛…

2025年市面上工程石材品牌与国内优质厂家深度解析——四川汇才石业有限公司引领行业

文章摘要 本文深入探讨2025年工程石材市场趋势,聚焦市面上工程石材品牌和国内优质厂家的选择策略。作为行业标杆,四川汇才石业有限公司凭借福建、广汉双仓库布局、自有矿山资源及严格质量管控,为用户提供高性价比、…

2025年市面上镀锌桥架供应商与国内制造商优质厂家排名前十解析

摘要 镀锌桥架作为电缆管理系统的关键组件,在建筑、工业和基础设施领域需求持续增长,预计2025年全球市场规模将达到XX亿元(数据来源:行业报告)。本文基于市场调研和用户反馈,精选排名前十的镀锌桥架供应商,并提…

2025年市面上镀锌桥架供应商前十强权威评测

摘要 镀锌桥架作为电气工程中的重要配套设备,其行业发展与基础设施建设紧密相关。近年来随着数据中心、智能建筑、轨道交通等领域的快速发展,镀锌桥架市场需求持续增长,预计2025年市场规模将达到百亿级别。本文基于…

JVM配置常用命令有哪些

JVM常用命令有哪些 jps查看java进程The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permis…

冬日绘版校徽上角色征集

快来投出你心仪的一票冬日绘版校徽上角色征集 征集角色,因为一些显而易见的原因,不接受梗图和真人图。 不需要考虑角色和校徽的适配度,最后会进行一些选择和修改。 如果目前没有你喜欢的角色,可以评论让我加入并投…

2025 年储罐厂家最新推荐榜,技术实力与市场口碑深度解析衬四氟/硫酸/盐酸储罐厂家推荐

引言储罐作为工业生产的核心存储设备,其性能直接关系到化工、环保、医药等领域的生产安全与运营效率。当前市场中,既有深耕多年的老牌企业,也涌现出一批技术创新型新势力,产品在防腐工艺、定制能力、环保适配性等方…

Remainder game

https://www.luogu.com.cn/problem/CF687B 由exCRT知道,最终其实就是要求k是否|lcm(a),但是直接求lcm会溢出,方法:1、质因数分解,比较次数,2、取模lcm=lcm/gcd(lcm,c)*c)%=k; // 读入+lcm 计算(注意先除后乘)+…

ResNet网络

ResNet网络 一.手写ResNet网络 (1)对于残差块有两种: 1.有1*1卷积层 Y=Y+conv_1x1(X) 2.无1*1卷积层 Y=Y+X(2)整体ResNet架构import torch from d2l import torch as d2l from torch import nn from torch.nn imp…

复旦附中英语期中考卷错题分析

错题共13道 1.不知道dream to do是口语化用法,所以选了此选项 2.不知道expectation后面加不同介词的用法,expectation of+具体期望的内容,expectation for+对某人的期望 3.现在完成进行时语法没完全学完 4.状语从句…

expectation后面的固定搭配

1. expectation of Expectation of用于强调对某事物或某结果的预期,通常后接具体期望的内容,如名词或动名词。例如:There is a high expectation of success in this project. 这句话表达了对项目成功的高期望。 2.…

079_尚硅谷_双分支基本使用

079_尚硅谷_双分支基本使用1.双分支的基本语法 2.双分支的基本语法案例

【转】[C#] .net core 项目的目标框架设置

【转】[C#] .net core 项目的目标框架设置转自:https://learn.microsoft.com/zh-cn/dotnet/standard/frameworks 点图中 目标框架 旁边的问号,在微软官网看到了这个枚举:支持的目标框架目标框架通常被简称为 TFM。 …