场景

不知道诸位在使用macOS时是否遇到过这样的场景:有两台电脑,想把旧电脑中的系统偏好设置原封不动地迁移(导入)到新电脑中,只关心这些设置,不想迁移其他东西。

解决

方案1:官方迁移助理

其实官方提供了一个方案,叫“迁移助理”。具体操作步骤可见文档:将内容迁移到一台新的 Mac 上,不仅可以迁移系统设置,还包括整个用户帐户下的文件、应用程序等。

如图,我们可以在此步骤中只选择“系统与网络”,就能实现系统设置的迁移。

方案2:macprefs

第一个方案其实是比较安全保险的做法,但是需要注意的是:

在这个示例中,John Appleseed 是一个 macOS 用户帐户。如果这个帐户与新 Mac 上已有的帐户同名,则系统会提示您重命名这个旧帐户或替换新 Mac 上的帐户。如果进行重命名,则这个旧帐户会作为单独的用户出现在新 Mac 上,并且拥有单独的个人文件夹和登录名。如果进行替换,则这个旧帐户会删除并随后替换新 Mac 上的帐户,包括相应个人文件夹中的所有内容。

也就是说你可以选择覆盖或者创建另一个帐户来迁移你的数据。其实很多时候,我们只是想把系统偏好设置做一个导出导入仅此而已,并不想涉及帐户相关的操作。又比如说我想把我的设置分享给其他朋友,或者备份到我自己的硬盘or云端。这个时候,就需要借助开源的力量了。

macprefs:Backup and Restore your Mac System and App Preferences (e.g. defaults write)

这个开源项目的About写得非常清楚,就是可以备份和恢复macOS的系统设置。安装和使用也非常方便:

1
brew install clintmod/formulas/macprefs

打开终端,一行命令安装。没有安装brew?官网在这里:https://brew.sh/

备份和恢复命令:

1
2
3
macprefs backup
# 备份成功之后,文件默认在~/Dropbox/MacPrefsBackup目录中
macprefs restore

当然,也可以修改默认备份目录:

1
export MACPREFS_BACKUP_DIR="$HOME/SomeOtherDir"

所以,我们就可以在旧电脑上备份后,把文件copy到新电脑上,再进行恢复。显然前提是两边都安装了macprefs。这里需要注意的是,最好保证两边的帐户用户名是一致的,否则可能出现奇怪的问题(含泪亲测)。

方案3:mackup

这个开源项目的简介:Keep your application settings in sync (OS X/Linux)

与方案2的区别在于,它直接把系统设置备份到了云端,需要先安装好Dropbox,相当于省去了手动copy文件到另一台电脑的操作。然后再安装此工具:

1
brew install mackup

备份和恢复命令:

1
2
mackup backup
mackup restore

相比macprefs还有个优势是,它可以撤销恢复操作:

1
mackup uninstall

也就是说如果我restore后发现有问题,比如出现奇怪的bug之类的,那么我可以撤销到原有的设置,给人很安心的感觉。除此之外,mackup不仅支持macOS,也支持Ubuntu等其他Linux发行版系统。

方案4:纯手动档

其实经过探索发现后,我们知道macOS会把用户的一些App设置存储在这里:/Users/xxx/Library/Preferences,会把系统相关的设置存储在这里:/Library/Preferences

其实上述的开源工具大致上也是备份了这些文件,从macprefs的部分源码可以得知:

1
2
3
def get_preferences_dir():
return_val = path.join(get_home_dir(), 'Library/Preferences/')
return return_val

理论上讲,我们手动把这些文件夹copy过去也可以。这个我没有亲测过,毕竟实际操作粒度可能不会这么粗,感兴趣的小伙伴可以折腾试验一下。

后话

之前还有人提到过直接Time Machine进行备份和恢复之类的办法,这未免有些大动干戈了。我只是想迁移系统偏好设置而已,尤其是触控板、鼠标、键盘等设置的微调,每次换电脑都要重新弄一遍很麻烦的。也但愿官方有更简单的办法来导出这些配置文件,毕竟开源工具更新不及时,也很可能出问题的。