macos磁盘工具不支持批量操作,需用hdiutil命令配合循环脚本实现自动化批量压缩;先用diskutil清理空闲空间提升压缩率,再执行hdiutil convert转换为udzo格式。
磁盘工具本身不支持批量处理,它一次只能操作一个已挂载的卷。所谓“批量转换压缩”,实际是通过终端脚本调用 hdiutil 命令,配合循环逻辑实现自动化——这才是 macos 下真正高效、可复用的方式。
为什么不能靠图形界面批量瘦身
磁盘工具(Disk Utility)的“图像 → 新建映像 → 来自卷名”流程必须手动选择每个已挂载卷,无法预设多个目标或排队执行。它没有批处理入口,也不保存操作历史。即使你同时挂载了 10 个 DMG,也得重复点击 10 次,且每次都要确认路径、命名、格式等参数,极易出错。
用 hdiutil 实现真正的批量压缩
hdiutil 是 macOS 自带的底层磁盘镜像命令行工具,功能远超磁盘工具界面,天然支持脚本化。以下是一个安全、实用的批量转换模板:
- 先确保所有待处理的 DMG 已挂载(双击打开即可),系统会自动分配
/Volumes/卷名路径 - 准备一个文本文件(如
volumes.txt),每行写一个卷名,例如:
MyApp Beta
Docs Archive
Tools Collection - 运行以下终端命令(复制粘贴后回车):
while IFS= read -r vol; do<br> [ -d "/Volumes/$vol" ] && hdiutil convert "/Volumes/$vol" -format UDZO -o "./${vol}_compressed.dmg"<br>done - 生成的
.dmg文件将保存在当前目录,格式为只读压缩(UDZO),自动启用 zlib 压缩
提升压缩率的关键前置动作
如果原始 DMG 是可写的(比如稀疏镜像或曾手动删过文件),直接转换体积缩减有限。必须先清空已删除区域,让压缩算法识别零块:
- 对每个卷单独执行:
sudo diskutil secureErase freespace 0 "/Volumes/卷名" - 该命令用零填充所有空闲空间,显著提升 UDZO 的压缩效率
- 建议在批量
hdiutil脚本前加一层循环执行此清理步骤
替代场景:需要跨平台或转 ISO 怎么办
若目标不是 macOS 分发,而是给 Windows 用户提供可刻录镜像,则磁盘工具和 hdiutil 都不适用。此时应使用专用转换工具:
-
dmg2img:将 DMG 转为通用.img,再用osirrox(macOS 自带)转 ISO:hdiutil convert input.dmg -format UDTO -o temp.cdr && osirrox -indev temp.cdr -o output.iso - 或直接用第三方 GUI 工具(如 Leawo DMG to ISO),适合单次少量转换











