是否可以查询启动服务数据库来查找将打开任意文件或 UTI 类型的应用程序?

是否可以查询启动服务数据库来查找将打开任意文件或 UTI 类型的应用程序?

我可以使用 mdls 来显示统一类型标识符(UTI)用于任意文件以及特定 UTI 超集的类型层次结构。

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

除了反复试验之外,是否还有其他工具可以显示哪些应用程序已注册特定的 UTI?

通过检查可以清楚看出该foo.command文件将由 Terminal.app 打开,但完全不清楚 foo.ksh 目前属于 TextEdit.app。

我希望能够阅读 Mac OS X发射服务直接访问数据库,而无需实际使用来open查看每个 UTI 选择了哪个应用程序。这就像打开--preview --verbose开关来告诉我要做什么,而不是执行它。

更好的方法是列出所有可以打开该 UTI 的应用程序,即使它们不是首选应用程序。

为了获取这些次要信息,我必须为每种兴趣类型创建或找到一个文件,并使用 Finder 手动显示哪些应用程序可以打开该 UTI。

在此处输入图片描述

我真的很希望能够从终端以编程方式访问这些数据。

答案1

安德鲁·莫滕森杜蒂是一个列出 UTI 处理程序的 CLI:

  • -d <uti>列出默认处理程序;
  • -l <uti>列出所有已注册的处理程序。

查看duti 的手册页

编辑:正如 Lri 指出的那样这个答案,duti 似乎没有列出所有可能的应用(可能是因为它没有考虑 UTI 继承?这将是一个需要进一步研究的问题)。他的解决方案是,全部应用(archive.org) 会给出更完整的答案。

答案2

您可以使用此命令检查启动服务数据库。-dump 选项为您提供整个数据库,然后您可以将其输入到 grep 并搜索您想要的任何内容。

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'

相关内容