4 votos

¿Cómo obtener la lista de aplicaciones que pueden abrir un archivo a través de Terminal?

En el finder puedes hacer clic de control en un documento para obtener el menú contextual, este 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.

4voto

Oskar Puntos 1242

Open consultará la misma base de datos que el finder para relacionar un tipo de archivo con posibles aplicaciones. El nombre de esta base de datos es Launch Serices Database y es bastante grande y poco manejable si se vuelca todo.

 lsregister -dump | wc -l

Yo tengo 533.000 líneas de texto en mi base de datos, así que es posible que tengas que acotar lo que buscas en lugar de consumir toda la manguera de datos sobre cada tipo de archivo y cada aplicación posibles. Si no tienes lsregister en tu ruta, encuéntralo aquí y opcionalmente haz un enlace simbólico a él en /usr/local/bin

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

Pero, si quieres la enchilada completa, puedes descargar la base de datos y profundizar en los gloriosos detalles técnicos.

Vamos a dar dos pasos más por la senda del conejo. Digamos que tienes un archivo de película en tu escritorio. Utilizarías la herramienta de listado de metadatos para volcar todos los atributos de ese archivo (61 entradas para una película que tengo) y luego tienes 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 elegir sólo el tipo de contenido más específico (ya que un archivo tiene un árbol de posibles tipos de contenido - es posible que tenga que considerarlos también en su búsqueda - pero ya que estamos manteniendo esto simple - vamos a suponer que el tipo final es lo que se corresponde con su caso)

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

Así que para mí, esa película está categorizada por la indexación de los focos como un com.apple.quicktime-movie tipo de archivo y en el volcado de servicios de lanzamiento - una de las aplicaciones que pretende abrir ese archivo es /Aplicaciones/QuickTime Player.app

La elaboración de un guión va a ser todo un ejercicio, pero los datos están ahí para que los examines y juegues con ellos. Que lo disfrutes.

Esta otra pregunta tiene algunos detalles más impresionantes y una herramienta llamada http://duti.org que podría ser la herramienta que buscas. Y lo que es mejor, es de código abierto para que puedas ver cómo funciona.

1voto

qarma Puntos 71

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

Utilizando JavaScript for Automation (JXA), puede recuperar una lista de aplicaciones capaces de abrir un tipo de contenido específico, denotado por un identificador de tipo uniforme .

ObjC.import('CoreServices');

const contentType = 'public.plain-text';

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

Para utilizarlo desde el Terminal puede ejecutarlo con osascript :

osascript -l JavaScript <<OSA
 .
 .
 .
OSA

Para mayor comodidad, es posible que desee crear un bash 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 sale en mi sistema:

BBEdit
MindNode
Atom
TextEdit
Pages
CotEditor
Numbers
TextMate

0 votos

Esto es fabuloso - tengo que aprender más sobre JXA o aprender a llegar a CoreServices de swift por lo que es el momento de sumergirse en la réplica osascript -il JavaScript y aprender más.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X