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

bmi*_*ike 12 osx-lion macos

我能够使用 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"
)
Run Code Online (Sandbox Code Playgroud)

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

从检查可以清楚地看出,该foo.command文件将由 Terminal.app 打开,但目前尚不清楚 foo.ksh 是否属于 TextEdit.app。

我希望能够直接读取 Mac OS X Launch Services数据库,而无需实际使用open查看每个 UTI 选择的应用程序。这就像--preview --verbose打开开关告诉我要做什么而不是做什么。

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

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

在此处输入图片说明

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

小智 12

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

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


kop*_*hke 6

Andrew Mortensen 的duti是一个 CLI,将列出 UTI 处理程序:

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

请参阅duti手册页

编辑:正如 Lri 在这个答案中指出的那样,duti 似乎没有列出所有可能的应用程序(可能是因为它没有考虑 UTI 继承?那将是进一步调查的问题)。他推荐的解决方案AllApplications显然是一个更好的答案。