De todos modos, ¿para obtener una lista de aplicaciones que pueden abrir un archivo a través de Terminal?

En el buscador, puede hacer clic en un documento para obtener el menú contextual, que tiene 'abrir con...' con un submenú de todas las aplicaciones que pueden abrir ese documento. ¿Hay alguna manera de obtener esta lista a través de Terminal? Muchas gracias.

Respuestas (2)

Open consultará la misma base de datos que Finder para hacer coincidir un tipo de archivo con aplicaciones potenciales. El nombre de esta base de datos es Base de datos de servicios de lanzamiento y es bastante grande y difícil de manejar si lo volcamos todo.

 lsregister -dump | wc -l

Tengo 533.000 líneas de texto en mi base de datos, por lo que es posible que deba limitar lo que está buscando en lugar de consumir toda la manguera contra incendios de datos sobre cada tipo de archivo posible y cada aplicación posible. Si no tiene lsregister en su ruta, búsquelo aquí y, opcionalmente, cree un enlace simbólico en /usr/local/bin

mdfind -name lsregister
ln -s $(mdfind -name lsregister) /usr/local/bin

Pero, si quiere la enchilada completa, puede volcar la base de datos y profundizar en los gloriosos detalles técnicos.

Vayamos dos pasos más por el camino del conejo. Digamos que tiene un archivo de película en su escritorio. Usaría la herramienta de lista de metadatos para volcar todos los atributos de ese archivo (61 entradas para una película que tengo) y luego tiene que analizar el tipo de contenido para que coincida con el volcado de la base de datos de los servicios de lanzamiento.

mdls ~/Desktop/video.mov | wc -l

Y para seleccionar solo el tipo de contenido más específico (dado que un archivo tiene un árbol de tipos de contenido potenciales, es posible que deba considerarlos también en su búsqueda, pero como mantenemos esto simple, supongamos que el tipo final es lo que coincide con su caso)

mdls ~/Desktop/video.mov | grep -w kMDItemContentType

Entonces, para mí, esa película está categorizada por la indexación de Spotlight como un archivo de tipo com.apple.quicktime-movie y en el volcado de servicios de inicio: una de las aplicaciones que dice abrir ese archivo es /Applications/QuickTime Player.app

Escribir esto va a ser todo un ejercicio, pero los datos están ahí para que los examine y juegue con ellos. ¡Disfrutar!

Esta otra pregunta tiene más detalles increíbles y una herramienta llamada http://duti.org que podría ser la herramienta que busca. Aún mejor, es de código abierto para que pueda ver cómo funciona.

Mi solución aquí es similar a una respuesta que proporcioné a un problema que comparte algunas similitudes con este problema.

Con JavaScript para automatización (JXA), puede recuperar una lista de aplicaciones capaces de abrir un tipo de contenido específico, indicado por un identificador de tipo uniforme .

ObjC.import('CoreServices');

const contentType = 'public.plain-text';

ObjC.deepUnwrap(
        $.LSCopyAllRoleHandlersForContentType(
                      contentType,
                      $.kLSRolesAll)
            );

Para usar esto desde la Terminal , puede ejecutarlo con osascript:

osascript -l JavaScript <<OSA
 .
 .
 .
OSA

Para mayor comodidad, es posible que desee crear una bashfunción y parametrizar el valor de contentType:

whatOpens() {
    osascript -l JavaScript <<OSA
        ObjC.import('CoreServices');

        ObjC.deepUnwrap(
                $.LSCopyAllRoleHandlersForContentType(
                        "$1",
                        $.kLSRolesAll
                )
        ).map(x=>Application(x).name())
         .join('\n');
OSA
}

Entonces:

whatOpens public.plain-text

que salidas en mi sistema:

BBEdit
MindNode
Atom
TextEdit
Pages
CotEditor
Numbers
TextMate
Esto es fabuloso: necesito aprender más sobre JXA o aprender a obtener CoreServices de Swift, así que es hora de sumergirme en la respuesta osascript -il JavaScripty obtener más información.