macOS 增量备份实战:rsync + SSH 同步文件夹并保留历史版本

适用场景与目标

如果你有一份经常变动的文件夹(例如:项目源码、写作资料、设计工程、照片整理目录),想要定期同步到另一台 Mac / Linux 主机或 NAS,并且希望:

1)只传输增量变更;2)可验证传输结果;3)必要时能找回上一版文件。

那么 https://www.rsync.samba.org/ + SSH 是一套足够稳的组合。本文以 macOS 为例给出可直接改路径复用的命令模板。

准备:确认 rsync 与 SSH 可用

macOS 一般自带 rsync/ssh。先在本机终端确认版本:

rsync --version

ssh -V

如果目标是一台远程机器(如 NAS 或另一台电脑),确保你能用 SSH 登录(推荐使用密钥)。生成密钥并复制到目标主机(示例用户名与主机请替换):

ssh-keygen -t ed25519 -C "backup"

ssh-copy-id user@your-host

参考说明:https://ss64.com/osx/ssh-copy-id.html

第一步:做一次“可回放”的全量同步(含校验与预演)

假设你要把本机的 ~/Work/ProjectA/ 同步到目标机的 /data/backups/ProjectA/current/。

建议先用 --dry-run 预演(不真正写入),确认会发生什么:

rsync -avh --delete --dry-run -e "ssh" ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/current/

确认无误后去掉 --dry-run 执行正式同步:

rsync -avh --delete -e "ssh" ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/current/

说明:

- -a:尽量保留权限/时间戳等;-v:输出过程;-h:友好显示。

- --delete:让目标端镜像一致(源端删了什么,目标端也删)。如果你不确定,先不要加。

第二步:加上排除规则,避免把缓存/依赖同步过去

很多目录没必要备份(例如 node_modules、构建产物、缓存)。你可以用 --exclude 或者写一个排除文件:

rsync -avh --delete --exclude ".DS_Store" --exclude "node_modules/" --exclude "dist/" -e "ssh" ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/current/

如果排除项很多,推荐用文件(例如 ~/.config/rsync-exclude.txt),内容一行一个模式,然后:

rsync -avh --delete --exclude-from="$HOME/.config/rsync-exclude.txt" -e "ssh" ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/current/

第三步:保留“历史版本”而不重复占用空间( -dest 思路)

如果你希望保留每天(或每次)同步时的快照,但又不想每次都完整复制一份,可以使用硬链接快照(同一文件未变化时不重复占用空间)。常见做法是:

1)当前目录写到按日期命名的目录;2)用 -- -dest 指向上一份快照。

示例(在本机执行,同步到目标机;日期目录按需要调整):

DATE=$(date +%Y-%m-%d)

rsync -avh --delete -e "ssh" -- -dest=/data/backups/ProjectA/latest/ ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/$DATE/

同步完成后,把 latest 软链接(或目录)更新到最新快照(在目标机执行):

ln -sfn /data/backups/ProjectA/$DATE /data/backups/ProjectA/latest

这样你就能在目标机上随时进入某一天的目录查看、对比、回滚文件。

验证与故障排查(必须做一次)

同步不是“跑完就算”。建议至少做一次验证:

- 用 --itemize-changes 查看差异明细

rsync -avh --delete --dry-run --itemize-changes -e "ssh" ~/Work/ProjectA/ user@your-host:/data/backups/ProjectA/current/

- 遇到权限/所有者问题,优先检查目标目录权限;必要时先在同一用户下备份,避免跨用户写入。

更多参数说明可参考:https://ss64.com/osx/rsync.html

安全提醒

本文仅讨论合法的备份与同步。请只在你拥有访问权限的设备与目录之间操作;不要把密钥、Token 等敏感文件误同步到不可信主机。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

暂无评论,快来抢沙发吧~

操作成功