无法一键生成全部应用的完整更新列表,需组合mdfind、mdls、softwareupdate、brew outdated --cask及系统报告等多源信息,因macOS更新机制碎片化且元数据不可靠。

没有一键生成“全部应用+版本+是否待更新”的完整列表命令,必须组合多个来源才能接近真实状态。
用 mdfind 扫全系统所有 .app 包并提取版本号
这是最接近“批量查版本”的起点,但结果不包含更新状态,且部分应用会漏掉:
-
mdfind "kMDItemKind == 'Application'"能跨目录(包括/Applications、~/Applications、甚至某些后台服务)找到所有被 Spotlight 索引的 .app - 配合
mdls提取元数据:mdfind "kMDItemKind == 'Application'" | while read app; do echo "$(basename "$app"): $(mdls -name kMDItemVersion "$app" 2>/dev/null | sed -n 's/.*= "\(.*\)".*/\1/p')"; done | sort - 注意:老旧或非沙盒应用(如某些 Parallels 插件、旧版 VirtualBox 工具)可能不写入
kMDItemVersion,输出为空,不能当作“未安装”处理 - 该命令不区分 App Store / 第三方来源,也无法识别已卸载但残留元数据的条目
区分 App Store 应用和第三方应用的更新逻辑
版本号只是快照,更新状态取决于分发渠道——macOS 不统一管理,强行混在一起查只会误导:
- App Store 应用:必须打开
App Store→ 点击头像 → 进“更新”页才能确认是否待更新;softwareupdate --list完全不包含它们 - 第三方应用(VS Code、Docker、Postman 等):只响应自身菜单栏里的“检查更新”,不会出现在 App Store 列表中,也无系统级通知
- Homebrew Cask 安装的应用:用
brew outdated --cask可列出可升级项,但仅限通过brew install --cask安装的那些 - 没签名或手动拖入的应用(如某些 Python GUI 工具):连
mdfind都可能搜不到,只能靠ls /Applications+ 手动点“关于”
用系统报告导出带来源标记的权威清单
这是唯一能同时看到“名称、版本、获得方式、最后使用时间”的图形化汇总入口,适合人工核对:
- 点击苹果图标 → “关于本机” → “系统报告…” → 左侧“软件”→“应用程序”
- 右侧表格含三列关键字段:
获得方式(App Store / 开发者 ID / 未知)、版本、最近使用时间 - 全选(
Command+A)→ 复制 → 粘贴到 Numbers 或 Excel,可按“获得方式”筛选,快速分离出需去 App Store 查的那批 - 缺点:不显示构建号,也不提示“有新版本”,且部分 CLI 工具(如
node、python3)根本不会出现在这里
为什么不能靠一个命令解决所有问题
因为 macOS 的应用更新机制是碎片化的:
- App Store 应用走
storeagent后台服务,元数据不暴露给终端命令 - 第三方应用更新通道完全由开发者控制,有的走 Sparkle 框架,有的走自建 HTTP 接口,有的压根不支持后台检查
-
kMDItemVersion是应用自己写进 Info.plist 的字符串,可为空、可伪造、可多年不更新——它只是个标签,不是状态指示器 - 真正容易被忽略的是:系统不会提醒你 VS Code 或 Alfred 插件过期,这类遗漏常导致安全风险或兼容性断裂

















