Ist es möglich, die Launch Services-Datenbank nach Anwendungen abzufragen, die eine beliebige Datei oder einen beliebigen UTI-Typ öffnen?

11

Ich kann mdls verwenden, um die UTI ( Uniform Type Identifier ) für eine beliebige Datei sowie die Hierarchie der Typen anzuzeigen , die Obermengen einer bestimmten UTI sind.

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

Gibt es Tools, die anzeigen können, welche Apps für eine bestimmte UTI registriert sind, außer Versuch und Irrtum?

Aus der Überprüfung geht hervor, dass die foo.commandDatei von Terminal.app geöffnet wird, aber es ist überhaupt nicht klar, dass foo.ksh derzeit zu TextEdit.app gehört.

Ich möchte in der Lage sein, die Mac OS X Launch Services- Datenbank direkt zu lesen, ohne tatsächlich zu verwenden, um openzu sehen, welche App pro UTI-Basis ausgewählt wird. Es wäre, als hätte man --preview --verboseSchalter, um sich zu öffnen und mir zu sagen, was ich tun würde, anstatt es zu tun.

Noch besser wäre eine Möglichkeit, alle Apps aufzulisten, die diese UTI öffnen könnten, auch wenn sie nicht die bevorzugte App sind.

Um diese sekundären Informationen zu erhalten, muss ich für jede Art von Interesse eine Datei erstellen oder finden und mit dem Finder manuell anzeigen, welche Apps diese UTI öffnen könnten.

Geben Sie hier die Bildbeschreibung ein

Ich möchte wirklich in der Lage sein, programmgesteuert vom Terminal aus auf diese Daten zuzugreifen.

bmike
quelle
Die zsh-Fertigstellung scheint interessant zu sein, aber ich sehe nicht, wie ich das als Standard erreichen kann. Ich werde im AppApplications-Quellcode nachsehen, ob die Binärdatei unter Lion funktioniert oder ob ich sie kompilieren kann. Es ist ein großartiges Paar Leads - danke!
Mike

Antworten:

6

Andrew Mortensens duti ist eine CLI, die UTI-Handler auflistet :

  • -d <uti> listet den Standardhandler auf;
  • -l <uti> listet alle registrierten Handler auf.

Siehe die Manpage für Duti .

BEARBEITEN: Wie Lri in dieser Antwort hervorhebt, scheint duti nicht alle möglichen Anwendungen aufzulisten (möglicherweise, weil es die UTI-Vererbung nicht berücksichtigt? Das wäre eine Frage der weiteren Untersuchung). Seine empfohlene Lösung AllApllications wäre offensichtlich eine bessere Antwort.

kopischke
quelle
Es fehlen jedoch einige Apps, die im Menü "Öffnen mit" angezeigt werden.
Lri
Sehr komisch. Können Sie mir sagen, welche fehlen?
Kopischke
Ich habe meine Antwort in der anderen Frage so bearbeitet , dass sie eine Beispielausgabe von duti enthält.
Lri
Während duti gut geschrieben ist, verwendet es jetzt veraltete APIs. Ich empfehle einen Blick auf developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen
OK - die Installation durch Homebrew führt zu einem Homerun. Vielen Dank!
Mike
11

Mit diesem Befehl können Sie die Datenbank der Startdienste untersuchen. Mit der Option -dump erhalten Sie die gesamte Datenbank. Anschließend können Sie diese in grep weiterleiten und nach Ihren Wünschen suchen.

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'

Chris
quelle
Ich muss wahrscheinlich eine Folgefrage stellen, wie dieser Speicherauszug verarbeitet werden soll, um das App-Bundle oder den Speicherort der spezifischen mdimporter-Datei auszuspucken, die einen bestimmten kMDItemContentType analysiert - aber dies hat sehr geholfen. Vielen Dank
bmike