我可以使用 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
答案2
您可以使用此命令检查启动服务数据库。-dump 选项为您提供整个数据库,然后您可以将其输入到 grep 并搜索您想要的任何内容。
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'