前段时间更换了新电脑,想到如果不用Time mechine的话,还有什么其他的方式安装常用的软件,写了一个备份脚本,用来备份常用的软件(包含brew下载的和App Store下载的软件)
脚本实现的主要功能:
- 获取brew下载列表和app store下载列表
- 写成对应工具的下载格式
- 提供一键安装的能力(也就是brew和mas的安装过程也要放在脚本内)
- 异地备份,这个脚本最好不保存在电脑本地,我指定的位置是iCloud云盘
经过查阅后,搜索到了MAS这个工具,可以获取App Store下载的软件并根据指定代码安装,且也可以通过homebrew下载安装。
脚本如下:
#!/bin/bash
# 定义输出路径
current_path="$(pwd)"
ICLOUD_DEST="${current_path}/Library/Mobile Documents/com~apple~CloudDocs"
OUTPUT_SCRIPT="${ICLOUD_DEST}/reinstall_software.sh"
# 确保目标目录存在
mkdir -p "${ICLOUD_DEST}"
# 生成 reinstall_brew.sh 文件
echo '#!/bin/bash' > "${OUTPUT_SCRIPT}"
echo 'echo "Starting Homebrew reinstallation..."' >> "${OUTPUT_SCRIPT}"
echo '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' >> "${OUTPUT_SCRIPT}"
echo "collecting app list from brew..."
echo 'echo "Installing Homebrew packages..."' >> "${OUTPUT_SCRIPT}"
brew list --formula | awk '{print "brew install " $0}' >> "${OUTPUT_SCRIPT}"
echo 'echo "Installing Homebrew cask applications..."' >> "${OUTPUT_SCRIPT}"
brew list --cask | awk '{print "brew install --cask " $0}' >> "${OUTPUT_SCRIPT}"
#处理mas
echo 'echo "Installing Mac App Store apps..."' >> "${OUTPUT_SCRIPT}"
echo "collecting app list from mas..."
# 添加重新登录到 App Store 的提示
echo 'echo "Please ensure you are logged in to the Mac App Store"' >> "${OUTPUT_SCRIPT}"
# 获取已安装的应用并添加安装命令
mas list | awk '{print "mas install " $1}' >> "${OUTPUT_SCRIPT}"
# 给脚本赋予执行权限
chmod +x "${OUTPUT_SCRIPT}"
echo "Backup script has been generated at ${OUTPUT_SCRIPT}"
# 日志记录
echo "Backup script updated at $(date)" >> ~/backup_log.log
这个脚本最后会在云盘生成一个reinstall_software.sh
文件,在使用时将其复制到本地并chmod +x
添加执行权限即可。同时这个脚本会在本地跟文件夹生成backup_log.log
文件,方便查询备份情况。
我将这个脚本整合进了.zprofile
的常用命令中,这样每次进行更新brew过程中都会执行一次备份工作,方便及时备份。
ps. 因为这个脚本只是简单的将所有的软件列表写进脚本,里面会涉及到一些不常用的软件,建议大家在使用reinstall_software.sh
文件前先人工筛选一遍,删除一些不必要的下载列表。