一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何使用 tar 命令搭配 Crontab 实现文件增量自动备份

时间:2026-07-03 10:15:45 编辑:袖梨 来源:一聚教程网

tar增量备份核心是用--newer选项配合时间戳文件,通过crontab定时执行脚本,只打包自上次备份以来修改过的文件,并自动更新时间戳作为下一轮基准。

tar 做增量备份,核心是利用 --newer(或 --newer-mtime)选项配合时间戳文件,再通过 crontab 定时触发。关键不是每次全量打包,而是只打包自上次备份以来有变动的文件。

准备一个时间戳标记文件

增量依赖“上次备份的时间点”,需手动或自动维护一个参考时间戳文件(如 /backup/last_backup.time)。首次运行前创建它:

  • 执行 touch /backup/last_backup.time 初始化
  • 后续每次成功备份后,用 touch /backup/last_backup.time 更新它,作为下一轮增量的基准

编写增量备份脚本

写个 shell 脚本(比如 /backup/incr_backup.sh),内容示例如下:

#!/bin/bashSRC_DIR="/home/user/docs"BACKUP_DIR="/backup"STAMP_FILE="$BACKUP_DIR/last_backup.time"DATE=$(date +%Y%m%d_%H%M%S)BACKUP_FILE="$BACKUP_DIR/incr_$DATE.tar.gz"<h1>打包比时间戳新的文件(含子目录)</h1><p>tar -czf "$BACKUP_FILE" --newer="$STAMP_FILE" -C "$SRC_DIR" .</p><h1>成功则更新时间戳</h1><p>if [ $? -eq 0 ]; thentouch "$STAMP_FILE"fi

注意:--newer 比较的是文件的修改时间(mtime),若需按修改时间而非状态变更时间,可用 --newer-mtime 更精确。

用 crontab 设置定时任务

运行 crontab -e 添加一行,例如每天凌晨 2 点执行:

0 2 * * * /bin/bash /backup/incr_backup.sh >/dev/null 2>&1
  • /bin/bash 显式调用 shell,避免环境变量缺失导致 tartouch 找不到
  • >/dev/null 2>&1 屏蔽标准输出和错误,如需日志可改为 >/backup/backup.log 2>&1
  • 确保脚本有执行权限:chmod +x /backup/incr_backup.sh

补充建议:避免重复与清理

增量备份会不断生成新包,建议加简单清理逻辑:

  • 在脚本末尾加 find "$BACKUP_DIR" -name "incr_*.tar.gz" -mtime +7 -delete,自动删除 7 天前的备份
  • 若担心时间戳被意外修改,可用 stat -c "%y" "$STAMP_FILE" 查看实际时间,或改用 date -d "1 hour ago" +%Y%m%d%H%M%S 动态计算(适合简单场景)
  • 重要数据建议搭配校验(如 tar -tzf $BACKUP_FILE >/dev/null 验证包完整性)再更新时间戳

不复杂但容易忽略细节:时间戳文件必须可写、路径一致、脚本里用绝对路径调用命令。跑通一次后,就能静默持续积累增量包了。

热门栏目