打造你自己的 Linux 备份命令:快速、高效、易用 【from claude.ai Haiku 4.5】

news/2025/11/2 16:24:48/文章来源:https://www.cnblogs.com/zhaopw5/p/19185084

打造你自己的 Linux 备份命令:快速、高效、易用 【from claude.ai Haiku 4.5】

在日常开发和系统维护中,我们经常需要备份文件和文件夹。虽然 cptar 命令完全可以胜任,但每次都要手动输入冗长的参数确实很麻烦。今天我就教你如何创建一个简洁优雅的 backup 命令,让备份工作变得轻而易举。

需求分析

理想的备份命令应该具备以下特点:

  • 命令简洁:只需 backup <目标> 即可
  • 自动识别:能够自动判断目标是文件还是文件夹
  • 智能命名:自动添加版本信息和日期
  • 灵活处理:保留原始文件的扩展名

具体效果如下:

# 备份文件夹
backup testfolds
# 生成: testfolds_v251102.tar.gz# 备份文件
backup test.py
# 生成: test_v251102.py

其中日期格式为 yymmdd(年月日),251102 表示 2025 年 11 月 02 日。

关于压缩格式的选择

在创建备份脚本前,我建议先说说压缩格式的选择。对于 Linux 系统,主要有几种选择:

格式 特点 适用场景
.tar.gz 兼容性好、压缩率中等、速度快 生产环境推荐
.tar.xz 压缩率最高、速度较慢 长期存储
.tar.bz2 压缩率较好、速度中等 一般用途
.tar 无压缩、速度最快 本地传输

我的建议:选择 .tar.gz。它提供了很好的平衡——兼容性强、压缩率不错、速度快。除非你有特殊需求(比如追求最极致的压缩率),否则 .tar.gz 总是最佳选择。

脚本详解

下面是完整的 backup 脚本。我会分段解释其工作原理。

#!/bin/bash# 获取今天的日期(格式:yymmdd,例如 251102)
DATE=$(date +%y%m%d)# 检查输入参数
if [ $# -ne 1 ]; thenecho "用法: backup <文件或文件夹>"exit 1
fiTARGET="$1"# 检查目标是否存在
if [ ! -e "$TARGET" ]; thenecho "错误:'$TARGET' 不存在"exit 1
fi# 如果是目录
if [ -d "$TARGET" ]; then# 移除末尾的斜杠(如果有的话)TARGET="${TARGET%/}"BACKUP_NAME="${TARGET}_v${DATE}.tar.gz"echo "正在备份文件夹: $TARGET -> $BACKUP_NAME"tar -czf "$BACKUP_NAME" "$TARGET"echo "备份完成!"# 如果是文件
elif [ -f "$TARGET" ]; then# 分离文件名和扩展名FILENAME="${TARGET%.*}"EXTENSION="${TARGET##*.}"# 如果文件没有扩展名,FILENAME 和 TARGET 会相同if [ "$FILENAME" = "$TARGET" ]; thenBACKUP_NAME="${TARGET}_v${DATE}"elseBACKUP_NAME="${FILENAME}_v${DATE}.${EXTENSION}"fiecho "正在备份文件: $TARGET -> $BACKUP_NAME"cp "$TARGET" "$BACKUP_NAME"echo "备份完成!"elseecho "错误:'$TARGET' 既不是文件也不是目录"exit 1
fi

获取日期

DATE=$(date +%y%m%d)

这行命令获取当前日期,格式为 yymmdd。例如 2025 年 11 月 2 日会变成 251102

参数检查

if [ $# -ne 1 ]; thenecho "用法: backup <文件或文件夹>"exit 1
fi

确保用户恰好提供了一个参数。

目标检查

if [ ! -e "$TARGET" ]; thenecho "错误:'$TARGET' 不存在"exit 1
fi

检查目标是否真实存在。

处理文件夹

if [ -d "$TARGET" ]; thenTARGET="${TARGET%/}"BACKUP_NAME="${TARGET}_v${DATE}.tar.gz"tar -czf "$BACKUP_NAME" "$TARGET"
fi

如果目标是文件夹,使用 tar -czf 命令创建压缩包。参数说明:

  • -c:创建新的 tar 文件
  • -z:使用 gzip 进行压缩
  • -f:指定输出文件名

处理文件

elif [ -f "$TARGET" ]; thenFILENAME="${TARGET%.*}"EXTENSION="${TARGET##*.}"if [ "$FILENAME" = "$TARGET" ]; thenBACKUP_NAME="${TARGET}_v${DATE}"elseBACKUP_NAME="${FILENAME}_v${DATE}.${EXTENSION}"ficp "$TARGET" "$BACKUP_NAME"
fi

如果目标是文件,脚本会:

  1. 使用 Bash 字符串操作分离文件名和扩展名

    • ${TARGET%.*}:移除最后一个点后的所有内容(扩展名)
    • ${TARGET##*.}:获取最后一个点后的所有内容(扩展名)
  2. 判断文件是否有扩展名

    • 有扩展名:test.pytest_v251102.py
    • 无扩展名:READMEREADME_v251102
  3. 复制文件到备份文件

安装步骤

步骤 1:创建脚本文件

nano ~/backup

将完整的脚本内容复制到编辑器中,然后按 Ctrl+X,再按 YEnter 保存。

步骤 2:添加执行权限

chmod +x ~/backup

步骤 3:添加到 PATH

这样你可以在系统的任何地方使用 backup 命令。编辑 shell 配置文件:

nano ~/.bashrc

在文件末尾添加:

export PATH="$HOME:$PATH"

保存后重新加载配置:

source ~/.bashrc

如果你使用的是 zsh,编辑 ~/.zshrc 而不是 ~/.bashrc

步骤 4:测试

# 创建测试文件和文件夹
mkdir testfolds
echo "test content" > test.py# 测试备份
backup testfolds
backup test.py# 查看结果
ls -lah | grep backup

你应该会看到:

  • testfolds_v251102.tar.gz
  • test_v251102.py

进阶用法

自定义压缩格式

如果想使用其他压缩格式,只需修改脚本中的这一行:

# 使用 xz 压缩(压缩率最高,但速度较慢)
tar -cJf "$BACKUP_NAME" "$TARGET"  # 将 .tar.gz 改为 .tar.xz# 使用 bz2 压缩
tar -cjf "$BACKUP_NAME" "$TARGET"  # 将 .tar.gz 改为 .tar.bz2

添加详细日志

在脚本中添加时间戳日志:

LOG_FILE="$HOME/.backup.log"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份: $TARGET -> $BACKUP_NAME" >> "$LOG_FILE"

自动删除过期备份

如果想自动清理 30 天前的备份:

find ~/ -name "*_v*.tar.gz" -type f -mtime +30 -delete

常见问题

Q: 为什么使用 tar.gz 而不是直接用 zip

A: 在 Linux 中,tar.gzzip 更常见,兼容性更好。zip 通常用于跨平台场景。

Q: 备份过的文件会被覆盖吗?

A: 不会。每次备份都会生成新文件。如果同一天进行多次备份,新文件会覆盖旧备份。如需保留多个版本,可以扩展日期格式为 yymmdd_HHMMSS

Q: 如何备份到其他位置?

A: 修改脚本,在生成备份名时指定路径:

BACKUP_DIR="$HOME/backups"
mkdir -p "$BACKUP_DIR"
BACKUP_NAME="$BACKUP_DIR/${TARGET}_v${DATE}.tar.gz"

Q: 如何设置定时自动备份?

A: 使用 cron 定时任务。运行 crontab -e 添加:

0 2 * * * /home/username/backup /path/to/important/folder

这会每天凌晨 2 点自动备份指定文件夹。

总结

通过这个简单的脚本,我们将复杂的备份操作简化为一个易记的命令。你再也不用担心忘记备份文件或搞混备份的版本了。

这就是命令行工具的魅力——看似简单的需求,一旦自动化,就能为我们节省大量的时间和精力。快去创建你自己的 backup 命令吧!


提示: 如果你的备份文件很大,建议定期检查磁盘空间。如需更高级的备份方案(如差异备份、远程备份),可以考虑使用专业的备份工具如 rsyncresticduplicity

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

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

相关文章

CVE-2025-12176漏洞分析:未记录的管理账户安全风险

本文详细分析了CVE-2025-12176高危漏洞,该漏洞由于系统创建未记录的管理账户而存在安全风险。影响BLU-IC2和BLU-IC4至1.19.5版本,CVSS评分达10.0分,攻击者可远程利用此漏洞获取系统权限。概述 CVE-2025-12176是一个…

信安中级考试备忘

个人在备考的笔记,主要针对案例题Linux iptables 四表五链 私网地址A类 10.0.0.0 ~ 10.255.255.255B类 172.16.0.0 ~ 172.31.255.255C类 192.168.0.0 ~ 192.168.255.255ASCII 码记忆 A(65) a(97) 0(48) 空格(32) NUL…

pdf下载网站

pdf下载网站下载地址: 1、https://github.com/Dujltqzv/Some-Many-Books

量子力学作业 4

第 4 次作业 习题 4.5 式 \(4.25\): \[sin\theta\frac{d}{d\theta}(sin\theta\frac{d\Theta}{d\theta}) + [l(l+1)sin^2\theta-m^2]\Theta=0 \]代入 \(l=m=0\) 得: \[sin\theta\frac{d}{d\theta}(sin\theta\frac{d\T…

区间颜色类问题

即 RMQ问题(对长度为n的数列快速响应多个区间极值查询) 中的统计颜色 在此类问题中最重要的是记录:所有颜色上一次出现的位置,然后通过维护使得每种颜色只记录一次 P1972 [SDOI2009] HH 的项链 P4137 Rmq Problem / …

【URP】Unity[后处理]色彩调整ColorAdjustments

Unity URP中的Color Adjustments后处理效果用于调整最终渲染图像的整体色调、亮度和对比度,是优化视觉表现的核心工具。其发展历史可追溯至Unity 4.X时代的色彩校正曲线和3D查【从UnityURP开始探索游戏渲染】专栏-直达…

[LangChain] Runnable接口 - 1

在 LCEL 中,几乎所有的模块:提示词模板 模型 解析器都是实现了 Runnable 接口的,可以将这些模块称之为 Runnable 类型。这种类型的模块可以快速插入到链条里面。 RunnableLambda RunnableLambda 是 LangChain.js 提…

MySQL 巡检用户创建脚本(Python 版)

MySQL 巡检用户创建脚本(Python 版)脚本依赖 需先安装 MySQL 官方 Python 连接器,执行以下命令安装: pip install mysql-connector-python完整 Python 脚本 import os import getpass import mysql.connector from…

初识目标检测

一.目前我校主要研究方向就是目标检测,所以首先应对目标检测有初步了解。目标检测属于计算机视觉中的一个热门方向,主要应用于物体、人、动物识别、动作识别等。结合我校农业研究方向,通过目标检测,可以用来检测瓜…

MySQL 8.0 双密码机制:改密码不中断业务,无缝切换的安全方案

MySQL 8.0 双密码机制:改密码不中断业务,无缝切换的安全方案改数据库密码时,你是否总在“安全”和“业务连续性”之间纠结?传统单密码模式下,一旦执行密码修改,现有连接会瞬间失效,应用直接报连接错误;若等业务…

记录Vmware WorkStation下安装的ESXi DCUI下 Resolving Hostname失败

原因未知,只是摸索出了一个方法可以解决实验环境如下: 有三台机器,宿主机Host 安装Vmware Workstation Pro17,虚拟机A 装的是Windows Server,在上面装了dns服务器,虚拟机B 装了EXSi 8,虚拟网卡选择的是NAT模式问…

【为美好CTF献上祝福】python 逆向

pyinstxtractor pyinstxtractor 是一个用于解包由 PyInstaller 打包的 Python 可执行文件的工具。 能把打包后的 .exe 文件还原为原始的项目结构。

MySQL参数优化最佳实践

MySQL参数优化最佳实践作为DBA,是否遇到过这样的糟心场景:云服务器CPU、内存明明还很空闲,可一到业务高峰期,数据库就开始“掉链子”——连接超时、查询卡死不说,CPU还会突然飙到100%;查看日志更是满屏报错:“T…

班级任务数据采集与融合实验第二次报告

数据采集与融合实验第二次报告 作业1 1)实验内容 要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。 该实验先观察url格式,发现不同城市的页面只和城市代码有关,于是使用…

LVGLSharp:LVGL的C#绑定库介绍

在嵌入式系统和图形用户界面(GUI)开发领域,LVGL(Light and Versatile Graphics Library)是一个广受欢迎的开源图形库,它提供了丰富的UI组件和高效的渲染能力,适用于各种资源受限的设备。而LVGLSharp则是LVGL的一…

Java方法——递归

Java方法——递归递归 A函数调用B函数 递归则是A函数调用A函数 利用递归可以用简单的程序来解决一些复杂问题。它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量程序就能…

2025 年 11 月氨糖软骨素厂家哪家好?剂型优化与人群适配双维度测评推荐

氨糖软骨素的服用体验与实际效果,很大程度取决于剂型设计合理性与对不同人群的适配性,市场上部分产品因剂型单一(如仅片剂)、配方未考虑特殊人群需求,导致服用不便、效果不佳。本次推荐基于国际关节健康协会 2025…

论文应该这样读(How to Read a Paper)

August 2, 2013 S. Keshav David R. Cheriton School of Computer Science, University of Waterloo Waterloo, ON, Canada keshav@uwaterloo.ca 摘要:科研人员一般都花费大量时间来阅读论文(下文亦有写作“文章”,…

各省市车牌号记忆 测试游戏

之前用C#写过这个小工具,现在用C++ Builder又试了一下,修正了一些错误。 见附件。打开释放即可以使用,无需其它文件或安装过程。 需要源码的可以留言。 https://files.cnblogs.com/files/blogs/845201/PrjChePaiTes…

2025年11月氨糖软骨素厂家哪家好?原料溯源与临床效果双维度优选推荐

氨糖软骨素产品的品质核心在于原料安全性与临床效果可靠性,但市场上部分产品存在原料来源不明、效果缺乏数据支撑等问题。本次推荐基于国际关节健康产业协会 2025 年第三季度测评数据,采用 “原料溯源完整性 - 临床效…