macos跨卷宗克隆rsync比cp更可靠,因rsync -ae可保留扩展属性、acl和资源派生,而cp默认不保留;ditto更适finder级元数据同步;需注意目标卷格式限制、sip拦截及路径斜杠规范。

macOS 中 rsync 跨卷宗克隆为什么比 cp 更可靠
因为 cp 默认不保留扩展属性(如 com.apple.FinderInfo)、ACL 权限、资源派生(resource fork),而跨卷宗(比如从 APFS 卷 A 复制到外接 ExFAT 卷 B)时,这些元数据丢失会导致 Finder 标签、预览图、Spotlight 索引异常。rsync 加上 -aE 参数能尽量保全,尤其在 APFS → APFS 场景下效果最稳。
-
rsync -aE --delete /src/ /dst/:结尾斜杠必须一致,否则行为突变(/src和/src/语义不同) - ExFAT 或 FAT32 目标卷不支持 ACL 和扩展属性,
rsync会静默跳过,但不会报错——需用ls -l@e对比源/目标验证 - 首次同步建议加
--dry-run,避免误删;--delete有风险,仅在目标是纯同步镜像时启用
用 ditto 实现 Finder 级别一致的跨卷宗复制
ditto 是 macOS 原生工具,专为保留 Finder 元数据设计,对 APFS 卷间复制更“原生”,尤其适合含标签、备注、图标位置等信息的用户资料目录。
-
ditto -V --rsrc --keepParent /src /dst:其中--rsrc强制保留资源派生(旧式 Mac 文件结构),--keepParent避免把内容直接 dump 到目标根目录 - 不支持增量同步,每次都是全量覆盖;大目录(如
~/Library)耗时明显,且无进度反馈 - 在 Time Machine 备份盘(HFS+/APFS)上使用安全;但写入 NTFS 或 ExFAT 时,
--rsrc会失败并退出,需去掉该参数
遇到 Operation not permitted 怎么办
这是 macOS SIP(系统完整性保护)或隐私控制拦截了对某些路径(如 /System、/Users/xxx/Library/Mobile Documents)的读取,不是权限问题,改 chmod 没用。
- 检查是否启用了“完全磁盘访问”权限:系统设置 → 隐私与安全性 → 完全磁盘访问 → 添加终端.app 或 iTerm.app(需重启终端)
- 避开受保护路径:例如不要直接复制
/Users/xxx/Library全量,改用~/Library/Application Support这类子路径 -
rsync报这个错时默认中断,加--ignore-errors可跳过,但要确认被跳过的文件是否关键
实时同步用 fswatch + rsync 的最小可行方案
macOS 没有开箱即用的 inotify,fswatch 是轻量替代,适合监听单个目录做准实时同步(秒级延迟),比 launchd 轮询更省电。
- 先用
brew install fswatch;然后运行:fswatch -o ~/Documents | xargs -n1 -I{} rsync -aE ~/Documents/ /Volumes/Backup/Documents/ - 注意
~/Documents/结尾斜杠不能少,否则rsync会在目标创建嵌套的Documents/Documents - 该组合不处理文件重命名/移动事件的原子性,若正在编辑的文档被同步,可能拷出中间状态;重要工作流建议仍以手动触发为主










