Mac App 列表定时备份脚本
参考
概述
有感少数派的文章,也尝试整合实现了 macOS 的软件列表自动定时备份,并生成自动安装命令的脚本,以便加快重装后的部署速度。
mas 是 brew 的一个包,可以命令行实现部分 Mac App Store 的功能,例如安装、搜索、更新。
此脚本将在当前用户文件夹的 Documents 文件夹下生成 AppList 文件夹,每次备份在其中生成 /Applications
文件夹下 App 的列表(Applications_Folder_List.txt
)、mas 安装的 App 的列表(MAS_List.txt
)、brew 安装的包的列表(Brew_List.txt
)、brew cask 安装的包的列表(BrewCask_List.txt
)、供重装后自动安装的脚本(AppInstaller.command
,双击即可安装)。
可以改动脚本变量实现自动备份到 OneDrive、iCloud 等。
前置需求
- brew(
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
) - brew cask(
brew tap caskroom/cask
) - mas(
brew install mas
)
脚本
将以下代码保存为 AppListAutoBackup.sh
并 chmod +x ./AppListAutoBackup.sh
即可。
#!/bin/bash
# 备份
AppList_Folder="$HOME/Documents/AppList"
Applications_Folder_List="$AppList_Folder/Applications_Folder_List.txt"
MAS_List="$AppList_Folder/MAS_List.txt"
Brew_List="$AppList_Folder/Brew_List.txt"
BrewCask_List="$AppList_Folder/BrewCask_List.txt"
AppInstaller="$AppList_Folder/AppInstaller.command"
if [ ! -d $AppList_Folder ]; then
mkdir $AppList_Folder
fi
# All Apps
ls -lh /Applications > $Applications_Folder_List
# MAS Apps
mas list > $MAS_List
# brew Apps
brew list > $Brew_List
# brew cask Apps
brew cask list > $BrewCask_List
# 生成 MAS_List 安装命令
cat $MAS_List | sed "s/(.*)//g" | sed -Ee 's/([0-9]+) (.+)/mas install \1 #\2/g' > $AppInstaller
# 生成 Brew_List 安装命令
echo "brew install $(cat $Brew_List | tr '\n' ' ')" >> $AppInstaller
# 生成 BrewCask_List 安装命令
echo "brew cask install $(cat $BrewCask_List | tr '\n' ' ')" >> $AppInstaller
# 赋予权限
if [ ! -x $AppInstaller ]; then
chmod +x $AppInstaller
fi
定时任务
使用自带的 crontab 命令来创建和运行定时任务。
编辑当前用户的任务:
crontab -e
在末尾插入 0 14 * * 7 export PATH=/usr/local/bin:$PATH && /Users/yourname/Documents/AppList/AppListAutoBackup.sh
,此例为在每周日 14 点运行这个脚本。
前面五个数字代表的意义,星号为 Any:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 |
---|---|---|---|---|---|
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
保存即可。
注意 crontab 的 PATH 变量是 /usr/bin:/bin
,可能无法识别 brew 和 mas 等命令,可以根据第四篇参考文章或其他方法指定 PATH,例如我将 crontab 命令内容改为 0 14 * * 7 export PATH=/usr/local/bin:$PATH && /Users/yourname/Documents/AppList/AppListAutoBackup.sh
。