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

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

Eu sou capaz de usar mdls para mostrar oIdentificador de tipo uniforme(UTI) para um arquivo arbitrário, bem como a 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"
)

Existem ferramentas que podem mostrar quais aplicativos foram registrados para uma UTI específica, além de tentativa e erro?

Fica claro pela inspeção que o foo.commandarquivo será aberto pelo Terminal.app, mas não está claro se foo.ksh atualmente pertence ao TextEdit.app.

Eu gostaria de poder ler o Mac OS XLançar serviçosbanco de dados diretamente, sem realmente recorrer ao uso openpara ver qual aplicativo é escolhido por UTI. Seria como ter --preview --verboseinterruptores abertos para me dizer o que faria, em vez de fazê-lo.

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

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

insira a descrição da imagem aqui

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

Responder1

Andrew Mortensendeveré uma CLI que listará os manipuladores de UTI:

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

Veja opágina de manual para duti.

EDIT: como Lri aponta emesta resposta, duti não parece listar todas as aplicações possíveis (possivelmente porque não leva em conta a herança da UTI? Isso seria um assunto para uma investigação mais aprofundada). Sua solução,Todos os aplicativos(archive.org) daria uma resposta mais completa.

Responder2

É possível usar este comando para examinar o banco de dados de serviços de inicialização. A opção -dump fornece o banco de dados inteiro, então você pode canalizá-lo para o grep e pesquisar o que quiser.

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

informação relacionada