Im Finder können Sie auf ein Dokument klicken, um das Kontextmenü aufzurufen, dieses hat "Öffnen mit ..." mit einem Untermenü aller Apps, die dieses Dokument öffnen können. Gibt es eine Möglichkeit, diese Liste über das Terminal abzurufen? Vielen Dank.
Open konsultiert dieselbe Datenbank wie der Finder, um einen Dateityp potenziellen Apps zuzuordnen. Der Name dieser Datenbank ist Launch Serices Database und sie ist ziemlich groß und unhandlich, wenn Sie alles ausgeben.
lsregister -dump | wc -l
Ich habe 533.000 Textzeilen in meiner Datenbank, daher müssen Sie vielleicht eingrenzen, was Sie suchen, anstatt einfach die gesamte Datenflut über jeden möglichen Dateityp und jede mögliche Anwendung zu verbrauchen. Wenn Sie lsregister nicht in Ihrem Pfad haben, finden Sie es hier und erstellen Sie optional einen symbolischen Link darauf in /usr/local/bin
mdfind -name lsregister
ln -s $(mdfind -name lsregister) /usr/local/bin
Aber wenn Sie die ganze Enchilada wollen, können Sie die Datenbank leeren und sich in die herrlichen technischen Details vertiefen.
Gehen wir noch zwei Schritte den Kaninchenpfad hinunter. Angenommen, Sie haben eine Filmdatei auf Ihrem Desktop. Sie würden das Metadaten-Auflistungstool verwenden, um alle Attribute dieser Datei (61 Einträge für einen Film, den ich habe) auszugeben, und dann müssen Sie den Inhaltstyp analysieren, um ihn mit dem Datenbankauszug von Startdiensten abzugleichen.
mdls ~/Desktop/video.mov | wc -l
Und um nur den spezifischsten Inhaltstyp auszuwählen (da eine Datei einen Baum potenzieller Inhaltstypen hat - müssen Sie sie möglicherweise auch bei Ihrer Suche berücksichtigen - aber da wir dies einfach halten - nehmen wir an, der letzte Typ ist was für Ihren Fall passt)
mdls ~/Desktop/video.mov | grep -w kMDItemContentType
Für mich wird dieser Film also durch die Spotlight-Indizierung als Datei vom Typ com.apple.quicktime-movie und im Dump der Startdienste kategorisiert - eine der Apps, die behauptet, diese Datei zu öffnen, ist /Applications/QuickTime Player.app
Das Erstellen von Skripten wird eine ziemliche Übung, aber die Daten sind für Sie da, damit Sie sie untersuchen und damit spielen können. Genießen!
Diese andere Frage enthält einige großartige Details und ein Tool namens http://duti.org , das möglicherweise das Tool ist, nach dem Sie suchen. Noch besser, es ist Open Source, sodass Sie sehen können, wie es funktioniert.
Meine Lösung hier ähnelt einer Antwort, die ich auf ein Problem gegeben habe, das einige Ähnlichkeiten mit diesem Problem aufweist.
Mit JavaScript for Automation (JXA) können Sie eine Liste von Anwendungen abrufen, die einen bestimmten Inhaltstyp öffnen können, der durch eine einheitliche Typkennung gekennzeichnet ist .
ObjC.import('CoreServices');
const contentType = 'public.plain-text';
ObjC.deepUnwrap(
$.LSCopyAllRoleHandlersForContentType(
contentType,
$.kLSRolesAll)
);
Um dies vom Terminal aus zu verwenden , können Sie es ausführen mit osascript
:
osascript -l JavaScript <<OSA
.
.
.
OSA
Der Einfachheit halber möchten Sie vielleicht eine Funktion erstellen bash
und den Wert von parametrisieren contentType
:
whatOpens() {
osascript -l JavaScript <<OSA
ObjC.import('CoreServices');
ObjC.deepUnwrap(
$.LSCopyAllRoleHandlersForContentType(
"$1",
$.kLSRolesAll
)
).map(x=>Application(x).name())
.join('\n');
OSA
}
Dann:
whatOpens public.plain-text
was auf meinem System ausgibt:
BBEdit
MindNode
Atom
TextEdit
Pages
CotEditor
Numbers
TextMate
Fahrrad
osascript -il JavaScript
und mehr zu lernen.