5分钟内可完成可靠增量备份:用find -mtime -1精准捕获24小时内修改/新建的代码文件,再通过rsync -av --files-from=实现高效增量同步,跳过未变文件并保留权限、软链及时间戳。

直接用 find + rsync 组合,配合时间戳筛选,5分钟内就能跑通一个可靠、可重复执行的增量备份脚本,精准捕获过去24小时内所有被修改过的代码文件(含新增、覆盖、重命名后的文件)。
核心思路:用 find 定位 24 小时内变更的文件
Linux/macOS 的 find 支持基于 mtime(内容修改时间)或 ctime(元数据变更时间)精确过滤。对代码资产而言,mtime 更准确——只要文件内容被保存过,mtime 就会更新。
-
find /path/to/src -type f -mtime -1:找出 24 小时内修改过的普通文件(注意:-mtime -1表示“少于 1 天”,即最近 24 小时) - 若需包含刚创建的文件(如新 .py/.js),
-mtime -1已覆盖(新建文件的 mtime = 创建时间) - 避免用
-newermt "24 hours ago"(部分旧版 find 不支持),优先选-mtime
极速打包:用 rsync 增量同步,跳过未变文件
单纯 copy 会重复搬运,而 rsync 能比对源/目标的大小+修改时间,只传真正有变化的文件,且支持保留权限、软链、时间戳。
- 命令模板:
rsync -av --files-from= -
--files-from接 find 输出列表,避免 shell 扩展失败或路径含空格问题 -
/src/末尾带斜杠表示“同步目录内容”,否则会把 src 目录本身也拷进去 - 首次运行后,后续只需改目标路径(如加时间戳),rsync 自动跳过已存在且未变的文件
加固可靠性:排除干扰项,聚焦代码资产
代码目录常混有构建产物、日志、.git、node_modules 等,必须过滤,否则备份体积暴增、恢复失效。
- 在 find 中加
-not -path "./node_modules/*" -not -path "./dist/*" -not -path ".git/*" - 更稳妥方式:用
--exclude-from=exclude.list配合 rsync,把排除规则集中管理 - 限定文件类型(可选):
-name "*.py" -o -name "*.js" -o -name "*.java" | xargs,但可能漏掉 Dockerfile、Makefile 等关键非源码文件,建议慎用
封装为可调度脚本(附完整示例)
保存为 backup_recent.sh,chmod +x 后即可手动运行或加入 crontab 每小时检查一次:
#!/bin/bash SRC="/home/dev/project" BACKUP_ROOT="/backup/code" DATE=$(date +%Y%m%d_%H%M) BACKUP_DIR="$BACKUP_ROOT/$DATE" <p>mkdir -p "$BACKUP_DIR"</p><p>find "$SRC" \ -type f \ -mtime -1 \ -not -path "$SRC/node_modules/<em>" \ -not -path "$SRC/dist/</em>" \ -not -path "$SRC/.git/<em>" \ -not -path "$SRC/logs/</em>" \</p><blockquote><p>"$BACKUP_DIR/filelist.txt"</p></blockquote><p>rsync -av --files-from="$BACKUP_DIR/filelist.txt" "$SRC/" "$BACKUP_DIR/"</p><p>echo "✅ Backed up $(wc -l </p>
crontab 示例(每小时执行,保留最近 7 天备份):0 * * * * /path/to/backup_recent.sh && find /backup/code -mtime +7 -type d -delete











