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


11

我能够使用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。

在此处输入图片说明

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


zsh的完成似乎很有趣,但是我不知道如何将其作为stdout获得。我将研究AppApplications源代码,看看二进制文件是否可以在Lion上运行,或者可以对其进行编译。这是一对很棒的线索-谢谢!
2011年

Answers:


6

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

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

有关duti的信息,请参见手册页

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


不过,它缺少一些将在“打开方式”菜单中显示的应用程序。
Lri 2011年

很奇怪。您能告诉我它丢失了哪些吗?
kopischke 2011年

在另一个问题中编辑了答案,以包括duti的示例输出。
Lri

虽然很好地编写了duti,但现在使用了不推荐使用的API。我建议看看developer.apple.com/library/prerelease/mac/documentation/Carbon/...
梦幻

可以-通过自制软件安装该软件可以实现本垒打。非常感谢!
bmike

11

您可以使用此命令来检查启动服务数据库。-dump选项为您提供了整个数据库,然后您可以将其通过管道传输到grep并搜索所需的内容。

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


我可能需要问一个后续问题,如何处理此转储以吐出应用程序捆绑包或解析特定kMDItemContentType的特定mdimporter文件的位置-但这很有帮助。谢谢
bmike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.