macOS 自带的 Time Machine 无疑是备份与还原的利器。无论是重装系统,还是新机配置,Time Machine 用起来都十分方便、省心。但是它存在以下不足:

  • 如果直接在本机硬盘上备份,Time Machine 动辄百 G 的硬盘占用,令小硬盘电脑用户望而却步。而且一般情况下,电脑内只有一块硬盘,如果系统和备份在同一硬盘上,那么硬盘挂了就两者皆挂。
  • 如果使用网络备份,带宽和网络空间费用可能都是问题。
  • 如果使用 NAS 或者使用树莓派架设 Time Capsule,则需要有一定的计算机相关基础和折腾能力。

即使上述情况对你来说都不是问题,多一种备份方式也是多一份安全和保障。

前一篇文章 定期自动云备份 macOS 软件列表,维护一份属于自己的必备 App 清单 发布后,受到不少读者的喜爱和关注。我也从评论中学到了一些更好的方法。

实际上,前文中解释说明较多,但是命令非最优,步骤不完整,内容不完备。因此写下本文,算是对前文的补充、对读者的补偿。本文算是前文的优化升级篇,阅读本文前,请先阅读前文

本文使用 Homebrew-Bundle 和 Mackup 备份软件列表和配置文件。什么是配置文件呢,就是那些保存了你千辛万苦调教好软件的偏好和配置的文件。如果你在一台新系统中,安装了 Alfred,那么你可能还需要一点点的调整它,以便符合你自己的使用习惯。备份配置文件后,重新安装 Alfred 时,直接还原相关配置就可以恢复到你习惯的样子。

本文分为 备份软件列表 和 备份配置文件 两部分。其中,Mackup 备份配置文件的原理为:将配置文件转移到iCloud、Dropbox、Google Drive 等云同步文件夹以实现备份和同步,在配置文件的原来位置生成一个软链接(相当于贴一张写有新位置的告示),从而让软件读取到新位置的配置。这种情况下,如果你删除了云同步文件夹中的配置文件,就什么都没有了!就什么都没有了!就什么都没有了!而且,mackup 支持备份的软件有限(可自己配置以支持更多软件)。所以,小白慎用!感觉挺鸡肋的。

但是,本文中的备份软件列表部分,还是值得一看的,优于前一篇文章中的方案。

本文默认你的 macOS 中已安装 Homebrew 和 mas,也就是运行以下命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install mas

如果没有安装,那么说明你还不了解 Homebrew 和 mas。你应该做的是搜索、阅读、了解,而不是立马安装。

迁移 App 至 Brew cask(可选、建议)

这里的“迁移”是指,将通过手动放入 /Applications 文件夹方式安装的 App,换作使用 brew cask 安装。之所以迁移,是因为在安装、更新、备份方面,brew cask 都更加简单。就以 Alfred 为例,搜索 App 的命令为:brew cask search alfred;安装命令为:brew cask install alfred。而且,使用brew cask upgrade可以批量更新所有 App(实际上,并不是)。

之所以 brew cask upgrade 不会更新所有 App,是因为部分 App 注明了它会自己更新,不用 brew cask 操心……

首先,运行命令:ls -l /Applications | awk '{print $3"\t", $0}' | sort > ~/Desktop/AppList.txt,得到一份软件列表。双击打开 AppList.txt 文件。其中,每行一个软件,第一列是每个软件文件的拥有者,并以此排序,最后一列为软件名。文件内容类似于:

Charles     drwxr-xr-x@  3 Charles     staff   96 Feb 22 09:20 Google Chrome.app
Charles     drwxr-xr-x@  3 Charles     staff   96 Feb 25 18:43 XnConvert.app
root        drwxr-xr-x   3 root  admin   96 Dec 20 22:51 iTunes.app
root        drwxr-xr-x   3 root  admin   96 Jan 16 14:55 Mail.app

其中,第一列为你自己用户名的所在行的软件,是你安装的;第一列为你 root 的所在行的软件,绝大部分是系统自带的。所以,只需关注你安装的软件。

对照 AppList.txt 文件,对于你安装的每个软件,执行下列步骤:

  1. 删除 /Applications 文件夹中的 App 文件,例如 firefox.app。如果你是用了 Hazel、AppCleaner 等软件的自动清理功能,注意不要清理残余的相关配置文件。
  2. 使用 brew cask 安装,例如 brew cask install firefox

需要说明的是:

  • cask 支持大部分软件,难免存在不支持的。
  • cask 中的名称与软件名不一定完全相同,例如安装 Chrome 浏览器的命令是brew cask install google-chrome。多个单词组成的软件名在 cask 中的名称一般是单词中加上连字符-,例如 DEVONthink Pro 对应 devonthink-pro。你可以通过搜索确定具体的命令,如:brew cask search DEVONthink

使用 homebrew-bundle 备份软件列表

这一部分主要是解释说明,不需要执行。具体的备份动作在下一节 设置自动备份 中进行。

备份列表包含:

  • brew 安装的命令行工具
  • brew cask 安装的 App
  • Mac App Store 安装的 App
brew bundle dump --describe --force --file="~/Desktop/Brewfile"

参数说明:

  • --describe:为列表中的命令行工具加上说明性文字。
  • --force:直接覆盖之前生成的Brewfile文件。如果没有该参数,则询问你是否覆盖。
  • --file="~/Desktop/Brewfile":在指定位置生成文件。如果没有该参数,则在当前目录生成 Brewfile 文件。

该命令会在桌面上生成Brewfile文件,双击打开查看,其内容类似于:

## 该部分是 brew 中的 tap,相当于一个个软件库。
tap "homebrew/science"
tap "homebrew/core"

## 该部分是 brew 安装的命令行工具。
# Download with resuming and segmented downloading
brew "aria2"
# Command-line client for DAV
brew "cadaver"

## 该部分是 brew cask 安装的 app
cask "1password"
cask "alfred"

## 该部分是 Mac App Store 安装的 app
mas "Commander One PRO", id: 1035237815
mas "Day One", id: 1055511498

设置自动备份

该自动备份任务是使用 Keyboard Maestro 定期运行的。

  1. 在 iCloud 中新建一个文件夹,名为 AppList
  2. 下载 Backup AppList.kmmacros,双击导入 Keyboard Maestro 中
  3. 启用 Backup AppList 任务

该任务每周一(任意时段)运行一次,将 /Applications 文件夹中的 app 列表和上一节中的 brewfile 列表保存到 iCloud 中 AppList 文件夹。

使用 mackup 备份配置文件(可选、慎用)

mackup 支持备份到 Dropbox(默认)、Google drive、iCloud,以及任意文件夹中。可通过 mackup 的配置文件~/.mackup.cfg进行设置。

首先,安装 mackup:brew install mackup
然后,进行备份:mackup backup

更详细的说明可以看:

通过备份的软件列表文件批量安装软件

将备份的文件同步至本地。

# 安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装 mas
brew install mas

# 批量安装软件
brew bundle --file="~/Library/Mobile\ Documents/com~apple~CloudDocs/AppList/Brewfile"