É possível consultar o banco de dados de serviços de inicialização para aplicativos que abrirão um arquivo arbitrário ou um tipo de UTI?

10

Eu posso usar o mdls para mostrar o Identificador Uniforme de Tipo (UTI) para um arquivo arbitrário, bem como o hierarquia de tipos que são superconjuntos de uma UTI específica.

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"
)

Há alguma ferramenta que possa mostrar quais Aplicativos foram registrados para uma UTI específica além de tentativa e erro?

Está claro desde a inspeção que o arquivo foo.command será aberto pelo Terminal.app, mas não está claro se foo.ksh atualmente pertence ao TextEdit.app.

Gostaria de poder ler o Mac OS X Inicie o banco de dados de serviços diretamente, sem realmente usar open para ver qual aplicativo é escolhido por UTI. Seria como ter --preview --verbose para abrir para me dizer o que faria ao invés de fazê-lo.

Melhor ainda seria uma maneira de listar todos os aplicativos que poderiam abrir essa UTI, mesmo que eles não sejam o aplicativo preferido.

Para obter essas informações secundárias, preciso criar ou localizar um arquivo para cada tipo de interesse e usar o Finder para mostrar manualmente quais aplicativos podem abrir essa UTI.

Eu realmente gostaria de poder acessar esses dados programaticamente a partir do terminal.

    
por bmike 15.08.2011 / 23:02

2 respostas

5
duti de Andrew Mortensen é uma CLI que listará os manipuladores de UTI:

  • -d <uti> lista o manipulador padrão;
  • -l <uti> lista todos os manipuladores registrados.

Veja a página man do duti .

EDIT: como Lri aponta em esta resposta , o duti não parece listar todos os aplicativos possíveis (possivelmente porque não leva em conta a herança da UTI? Isso seria uma questão para investigação adicional). Sua solução recomendada, AllApllications , obviamente, seria uma resposta melhor.

    
por 12.10.2011 / 10:20
10

Você pode usar este comando para examinar o banco de dados dos serviços de inicialização. A opção -dump lhe dá o banco de dados inteiro, então você pode canalizar isso para o grep e procurar o que quiser.

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

    
por 17.04.2012 / 23:13