序言
在日常的开发与文件管理工作中,我们可能需要在两个不同目录之间保持内容一致。例如,我们希望在多处维护同一份资料,避免手动复制带来的麻烦与风险。
macOS 提供了强大的文件系统机制,但默认并不具备实时、双向同步的功能。Unison 正是在这种需求下脱颖而出的高效工具。它轻量、跨平台、可配置性强,能够在两个目录间实现真正的双向同步:无论哪一方发生变化,另一方都能自动更新,保持内容完全一致。
本篇文章将从零开始,带你系统了解如何在 macOS 上安装、配置并运行 Unison,实现如下目标:
- 🧩 在两个独立目录(A 与 B)间保持实时同步;
- 🔁 自动检测文件的新增、修改与删除;
- 🧱 在发生冲突时自动判断或提示处理;
- ⚙️ 支持后台常驻运行、定时任务或实时监听模式;
- 🧾 提供详细的命令说明与一键启动脚本。
通过本教程,你将掌握一套稳定、安全且可扩展的文件同步方案,无论是用于开发环境镜像、资料备份,还是项目文件共享,都能高效、可靠地运作。
集成步骤
- 安装与验证 Unison
- 建立配置文件
- 编写一键执行脚本(可自动同步)
- 讲解常用命令与参数
🧩 一、安装 Unison
在 macOS 上通过 Homebrew 安装:
1 | brew install unison |
检查是否安装成功:
1 | unison -version |
输出类似:
1 | unison version 2.53.3 |
✅ 表示安装成功。
📂 二、假设目录结构
我们设定两个目录(本地双向同步):
1 | A = /Users/lee/Documents/A |
目标:
- 修改 A → 自动同步到 B
- 修改 B → 自动同步到 A
- 删除或新增也同步
- 保留日志与冲突提示
🧰 三、创建配置文件(推荐方式)
Unison 默认会在:
1 | ~/.unison/ |
这个目录下存放配置文件(以 .prf 为后缀)。
创建配置文件:
1 | mkdir -p ~/.unison |
输入以下内容(可直接复制):
1 | # ~/.unison/ab-sync.prf |
保存后退出(Ctrl + O 回车,Ctrl + X 退出)。
🚀 四、执行同步命令
在终端中直接运行:
1 | unison ab-sync |
✅ 效果:
- Unison 会根据
ab-sync.prf文件自动识别目录并开始同步。 - 首次运行会扫描两边文件并建立索引。
- 日志记录在
/Users/lee/Documents/unison.log
之后每次只要执行这条命令 就能进行双向同步。
🌀 五、后台自动同步(守护进程方式)
如果你希望它持续自动同步(比如每隔几分钟),可以使用 repeat 参数或配合 macOS launchd/cron。
方法 1:直接运行重复同步模式
1 | unison ab-sync -repeat watch |
🔹 意思是:Unison 会实时监控两边文件变化(通过 FSEvents),一旦检测变化就自动同步。
🔹 这种方式最适合你这种“修改即同步”的场景。
可在后台运行:
1 | nohup unison ab-sync -repeat watch > /Users/lee/Documents/unison-daemon.log 2>&1 & |
方法 2:使用 Cron 定时同步
1 | crontab -e |
添加:
1 | */5 * * * * /usr/local/bin/unison ab-sync |
表示每 5 分钟同步一次。
💻 六、一键脚本示例
创建脚本 /Users/lee/Documents/run-unison-sync.sh:
1 | #!/bin/bash |
运行:
1 | chmod +x /Users/lee/Documents/run-unison-sync.sh |
✅ 从此之后,Unison 就会在后台自动保持 A 与 B 同步。
🧠 七、常用命令说明
| 命令 | 说明 |
|---|---|
unison ab-sync |
按配置文件同步(一次性) |
unison ab-sync -repeat watch |
实时监控自动同步 |
unison ab-sync -ui text |
纯命令行输出(默认) |
unison ab-sync -ui graphic |
图形界面模式 |
unison ab-sync -batch |
无交互批处理模式 |
unison ab-sync -force /path/A |
强制以 A 为主覆盖 B |
unison ab-sync -logfile /tmp/unison.log |
指定日志文件 |
unison -showarchives |
查看同步索引信息 |
unison -removearchives |
清除索引缓存(重建) |
🧩 八、冲突与安全机制
Unison 会自动检测冲突(两边文件同时修改),行为如下:
- 如果设置了
prefer = newer→ 自动选时间较新的文件 - 如果设置了
prefer = /path/A→ 永远以 A 为准 - 如果无法判断,会在命令行提示选择
✅ 总结
| 目标 | 方法 |
|---|---|
| 双向实时同步 | unison ab-sync -repeat watch |
| 仅单次同步 | unison ab-sync |
| 自动后台运行 | nohup unison ab-sync -repeat watch & |
| 优先 A 目录 | prefer = /Users/lee/Documents/A |
| 定时同步 | crontab 或 repeat = 300 |