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.shchmod +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


comments powered by Disqus