¿De todos modos, para obtener una lista de la aplicación que puede abrir un archivo a través de Terminal?

4

En el buscador, puede controlar haciendo clic en un documento para obtener el menú contextual, esto 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.

    
pregunta Dave Yeaman 10.11.2018 - 15:47

2 respuestas

4

Open consultará la misma base de datos que el buscador para hacer coincidir un tipo de archivo con aplicaciones potenciales. El nombre de esta base de datos es la base de datos de Servicios de inicio y es bastante grande y difícil de manejar si lo vuelves todo.

 lsregister -dump | wc -l

Tengo 533,000 líneas de texto en mi base de datos, por lo que es posible que necesite limitar lo que está buscando en lugar de simplemente consumir toda la manguera de fuego de los datos sobre cada tipo de archivo posible y cada aplicación posible. Si no tiene lsregister en su ruta, búsquelo aquí y, opcionalmente, haga 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 volcar la base de datos y profundizar en los detalles técnicos gloriosos.

Vayamos dos pasos más por el camino del conejo. Digamos que tienes un archivo de película en tu escritorio. Usaría la herramienta de listado de metadatos para volcar todos los atributos de ese archivo (61 entradas para una película que tengo) y luego tendrá que analizar el tipo de contenido para que coincida con el volcado de 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 (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 dado que estamos manteniendo esto simple, asumamos que El tipo final es lo que corresponde a tu caso)

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

Entonces, para mí, la película se clasifica según la indexación de Spotlight como un archivo de tipo com.apple.quicktime-movie y en el volcado de servicios de lanzamiento: una de las aplicaciones que pretende abrir ese archivo es / Applications / QuickTime Player.app

Secuencias de comandos será un gran ejercicio, pero los datos están allí para que los examine y juegue. ¡Disfruta!

Esta otra pregunta tiene más detalles asombrosos y una herramienta llamada enlace que puede ser la herramienta que busque. Aún mejor, es de código abierto para que puedas ver cómo funciona.

respondido por el bmike 10.11.2018 - 15:56
0

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

Usando 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 el Terminal , puedes ejecutarlo con osascript :

osascript -l JavaScript <<OSA
 .
 .
 .
OSA

Por conveniencia, es posible que desee crear una función 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

qué salidas en mi sistema:

BBEdit
MindNode
Atom
TextEdit
Pages
CotEditor
Numbers
TextMate
    
respondido por el CJK 13.11.2018 - 09:36

Lea otras preguntas en las etiquetas