In ogni caso per ottenere l'elenco delle applicazioni che possono aprire un file tramite terminale?

4

Nel Finder puoi controllare il clic su un documento per ottenere il menu contestuale, questo è 'aperto con ...' con un sottomenu di tutte le app che possono aprire quel documento. C'è un modo per ottenere questo elenco tramite terminale? Molte grazie.

    
posta Dave Yeaman 10.11.2018 - 15:47
fonte

2 risposte

4

Open consulta lo stesso database del finder per abbinare un tipo di file a potenziali app. Il nome di questo database è il database Launch Serices ed è abbastanza grande e ingombrante se si esegue il dump di tutto.

 lsregister -dump | wc -l

Ho 533.000 righe di testo nel mio database, quindi potrebbe essere necessario restringere quello che stai cercando piuttosto che consumare l'intera manichetta antincendio di dati su ogni possibile tipo di file e ogni possibile applicazione. Se non si dispone di lsregister nel percorso, trovarlo qui e facoltativamente fare un collegamento simbol ad esso in / usr / local / bin

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

Ma, se vuoi l'intera enchilada, puoi scaricare il database e scavare nei gloriosi dettagli tecnici.

Facciamo ancora due passi lungo il percorso del coniglio. Supponi di avere un filmato sul desktop. Dovresti usare lo strumento di elencazione dei metadati per scaricare tutti gli attributi di quel file (61 voci per un film che ho) e poi devi analizzare il tipo di contenuto per abbinarlo al dump del database dai servizi di lancio.

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

E per scegliere solo il tipo di contenuto più specifico (dato che un file ha un albero di potenziali tipi di contenuto - potresti doverli considerare anche nella tua ricerca - ma dal momento che stiamo mantenendo questo semplice - assumiamo che il tipo finale è ciò che corrisponde al tuo caso)

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

Quindi, per me, quel film è classificato dall'indicizzazione spotlight come file di tipo com.apple.quicktime-movie e nel dump di servizi di avvio - una delle app che afferma di aprire quel file è / Applicazioni / QuickTime Player.app

Script di questo sarà un bel esercizio, ma i dati sono lì per te da esaminare e giocare. Buon divertimento!

Questa altra domanda ha alcuni dettagli più impressionanti e uno strumento chiamato link che potrebbe essere lo strumento che cerchi. Ancora meglio, è open source, quindi puoi vedere come funziona.

risposta data 10.11.2018 - 15:56
fonte
0

La mia soluzione qui è simile a una risposta che ho fornito a un problema che condivideva alcune somiglianze con questo problema.

Utilizzando JavaScript per l'automazione (JXA), è possibile recuperare un elenco di applicazioni in grado di aprire un tipo di contenuto specifico, indicato da un Identificatore di tipo uniforme .

ObjC.import('CoreServices');

const contentType = 'public.plain-text';

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

Per usarlo dal Terminale , puoi eseguirlo con osascript :

osascript -l JavaScript <<OSA
 .
 .
 .
OSA

Per praticità, potresti voler creare una funzione bash e parametrizzare il valore di contentType :

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

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

Quindi:

whatOpens public.plain-text

quali uscite sul mio sistema:

BBEdit
MindNode
Atom
TextEdit
Pages
CotEditor
Numbers
TextMate
    
risposta data 13.11.2018 - 09:36
fonte

Leggi altre domande sui tag