¿Es posible consultar la base de datos de servicios de inicio en busca de aplicaciones que abran un archivo arbitrario o un tipo de UTI?

¿Es posible consultar la base de datos de servicios de inicio en busca de aplicaciones que abran un archivo arbitrario o un tipo de UTI?

Puedo usar mdls para mostrar elIdentificador de tipo uniforme(UTI) para un archivo arbitrario, así como la jerarquía de tipos que son superconjuntos de una 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"
)

¿Existe alguna herramienta que pueda mostrar qué aplicaciones se han registrado para una ITU en particular, además de prueba y error?

De la inspección se desprende claramente que foo.commandTerminal.app abrirá el archivo, pero no está del todo claro que foo.ksh pertenezca actualmente a TextEdit.app.

Me gustaría poder leer Mac OS XServicios de lanzamientobase de datos directamente sin tener que recurrir al uso openpara ver qué aplicación se elige según la ITU. Sería como tener --preview --verboseinterruptores que abrir y decirme qué haría en lugar de hacerlo.

Aún mejor sería una forma de enumerar todas las aplicaciones que podrían abrir esa ITU, incluso si no son la aplicación preferida.

Para obtener esta información secundaria, tengo que crear o buscar un archivo para cada tipo de interés y usar Finder para mostrar manualmente qué aplicaciones podrían abrir esa ITU.

ingrese la descripción de la imagen aquí

Realmente me gustaría poder acceder a estos datos mediante programación desde la terminal.

Respuesta1

Andrew Mortensenduties una CLI que enumerará los controladores de UTI:

  • -d <uti>enumera el controlador predeterminado;
  • -l <uti>enumera todos los controladores registrados.

Ver elpágina de manual para duti.

EDITAR: como señala Lri enesta respuesta, duti no parece enumerar todas las aplicaciones posibles (¿posiblemente porque no tiene en cuenta la herencia de ITU? Eso sería un tema para mayor investigación). Su solución,Todas las aplicaciones(archive.org) daría una respuesta más completa.

Respuesta2

Puede utilizar este comando para examinar la base de datos de servicios de inicio. La opción -dump le brinda la base de datos completa, luego puede canalizarla a grep y buscar lo que quiera.

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

información relacionada