mac 上用 apfs 快照找回被篡改代码的核心步骤是:定位含目标时间点的本地快照(查 /system/volumes/data)、挂载只读快照、用 diff 逐文件或批量比对、精准复制干净文件恢复,全程使用系统自带工具。

Mac 上用 APFS 快照对比找回被篡改的代码文件,核心是“定位旧版本 → 挂载只读快照 → 逐文件比对 → 复制干净内容”。不需要第三方工具,系统自带功能就能完成,关键是路径要准、操作要稳。
确认快照是否存在且含目标代码时间点
APFS 快照默认由 Time Machine 自动创建(即使没连备份盘),但 macOS 11+ 后快照实际存储在 /System/Volumes/Data,不是根目录 /。只运行 tmutil listlocalsnapshots / 可能为空,必须交叉验证:
- 打开终端,运行:
sudo tmutil listlocalsnapshots /
看是否列出类似com.apple.TimeMachine.2026-07-28-143022的快照(含你改代码前的日期) - 若无结果或不确定,立刻补查数据卷:
sudo diskutil apfs listSnapshots /System/Volumes/Data
重点看 Creation Date 和 Purgeable: Yes —— 确保快照未被系统自动清理
挂载快照并定位你的项目目录
找到合适时间点的快照后,把它当作一个只读磁盘挂载出来,方便直接浏览和比对:
- 复制快照名中时间戳部分(如
2026-07-28-143022),执行:sudo tmutil mountsnapshot 2026-07-28-143022 - 成功后,访达边栏会出现新磁盘,名称类似
com.apple.TimeMachine.2026-07-28-143022.local - 进入该磁盘 → Data → 找到你项目所在路径(例如
Users/yourname/Documents/MyApp)
用命令行快速比对两个版本的代码差异
图形界面翻文件效率低,尤其改了多个文件时。推荐在终端里用 diff 直接对比:
- 先确认当前工作区路径(被篡改的版本):
cd ~/Documents/MyApp - 再进快照挂载路径(旧版):
cd /Volumes/com.apple.TimeMachine.2026-07-28-143022.local/Data/Users/yourname/Documents/MyApp - 返回原项目目录,执行对比(以单个文件为例):
diff ./src/main.swift /Volumes/com.apple.TimeMachine.2026-07-28-143022.local/Data/Users/yourname/Documents/MyApp/src/main.swift - 想批量看哪些文件变了?运行:
diff -rq . /Volumes/com.apple.TimeMachine.2026-07-28-143022.local/Data/Users/yourname/Documents/MyApp | grep "differ\|Only"
安全恢复:只取需要的文件,不覆盖整个目录
比对确认某几个 .swift/.py/.js 文件确实被误改后,不要全量覆盖,而是精准复制:
- 从快照磁盘中拖拽对应文件到桌面或临时文件夹
- 用文本编辑器打开,确认内容正确(避免挂载异常导致读取错乱)
- 再手动替换你项目中的同名文件——这样可保留后续新增但未被篡改的其他文件
- 完成后,在访达中右键点击挂载的快照磁盘 → “推出”,确保系统释放资源











