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/bash SRC_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><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/ai/2595" title="OpenFuture"><img src="https://img.php.cn/upload/ai_manual/001/246/273/6971fa6fda42b862.png" alt="OpenFuture" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/ai/2595" title="OpenFuture" class="overflowclass">OpenFuture</a> <p class="overflowclass">一款AI工具,主要用于OpenFuture是一个使用广泛的AI工具库,适合需要提升相关任务效率的用户。</p> </div> <a rel="nofollow" href="/ai/2595" title="OpenFuture" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h1>成功则更新时间戳</h1><p>if [ $? -eq 0 ]; then touch "$STAMP_FILE" fi </p>
注意:--newer 比较的是文件的修改时间(mtime),若需按修改时间而非状态变更时间,可用 --newer-mtime 更精确。
用 crontab 设置定时任务
运行 crontab -e 添加一行,例如每天凌晨 2 点执行:
0 2 * * * /bin/bash /backup/incr_backup.sh >/dev/null 2>&1
-
/bin/bash显式调用 shell,避免环境变量缺失导致tar或touch找不到 -
>/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验证包完整性)再更新时间戳
不复杂但容易忽略细节:时间戳文件必须可写、路径一致、脚本里用绝对路径调用命令。跑通一次后,就能静默持续积累增量包了。










