Ändern Sie die Standardanwendung (für eine Dateierweiterung) über Skript / Befehlszeile?

11

Gibt es eine Möglichkeit, die Standardanwendung für eine Dateierweiterung über ein Apple-Skript zu definieren, Befehlszeilenbefehl (wie defaults write [...]).

Ich weiß, dass Sie es manuell über das Informationsfenster oder mithilfe von RCDefaultApp ändern können, aber da ich viele Computer und Benutzerkonten einrichten muss, möchte ich einen Weg finden, um den Prozess zu automatisieren.

oschrenk
quelle

Antworten:

6

duti ist ein Shell-Dienstprogramm, mit dem mithilfe einer Textdatei die Standardanwendungen für Dateitypen und URL-Schemata konfiguriert werden können.

Speichern Sie beispielsweise eine Datei wie folgt ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

Dann renne duti ~/.duti.

Sie können duti mit brew install dutioder durch Ausführen installieren wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install.

Lri
quelle
Dies scheint vielversprechend, obwohl ich es unter OS X 10.7.x oder 10.8.x nicht kompilieren kann : checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens
Die Binärdatei im pkg-Installationsprogramm funktioniert bei 10.8 immer noch für mich.
Lri
Aha. Zum späteren Nachschlagen hier der Link zu diesem Download: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Mathias Bynens
Funktioniert das unter 10.8? Ich habe die Standardanwendung zu öffnen .aviDateien in Quicktime Player (Finder → Get InfoÖffnen mit ... → _change alle ), dann lief duti -s org.videolan.vlc public.avi allVLC stattdessen zu verwenden, dann neu gestartet Launchservice - aber es schien keine Wirkung zu haben. (Siehe Liste der vom System deklarierten UTIs .)
Mathias Bynens
1
Das funktioniert zumindest bei mir. Es sollte nicht erforderlich sein, die Launch Services-Datenbank neu zu erstellen oder neu zu starten. Wenn Sie sich das ansehen ~/Library/Preferences/com.apple.LaunchServices.plist, konvertiert duti die meisten Dateinamenerweiterungen automatisch in UTIs, sodass Sie normalerweise die Typen wie .avianstelle von angeben können public.avi. Die UTIs einiger Dateinamenerweiterungen hängen von den installierten Anwendungen ab.
Lri
12

Launch Services ist für die Standarddateizuordnungen verantwortlich.

Angenommen, ich wollte alle Textdateien so ändern, dass sie in Sublime Text 2 geöffnet werden.

Zuerst brauche ich den kMDItemCFBundleIdentifier für Sublime Text 2. Ich kann mdls verwenden , um diese Informationen zu erhalten:

> mdls /Applications/Sublime\ Text\ 2.app 
_kTimeMachineIsCreationMarker  = 1
_kTimeMachineNewestSnapshot    = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot    = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier      = "com.sublimetext.2"
....snip....

Ich kann den Wert des Inhaltstyps für Textdateien herausfinden, indem ich eine davon mit mdls überprüfe :

> mdls test.txt 
kMDItemContentCreationDate     = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-03-25 04:18:50 +0000
kMDItemDisplayName             = "test.txt"
kMDItemFSContentChangeDate     = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate          = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "test.txt"
kMDItemFSNodeCount             = 975
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 975
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text"
kMDItemLogicalSize             = 975
kMDItemPhysicalSize            = 4096

In diesem Fall ändere ich die Standardanwendung für alle public.plain-textTypen.

Dazu tippe ich:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

Wenn die Änderungen wirksam werden sollen, muss ich Launch Services wie folgt neu starten:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

Um Kredit zu geben, wo Kredit fällig ist, habe ich diesen Ansatz anhand dieser Frage und Antwort von stackoverflow.com kennengelernt: /programming/9172226/how-to-set-default-application-for-specific-file -types-in-mac-os-x

Ian C.
quelle
0

Dieser Beitrag auf SuperUser enthält auch einige hilfreiche Informationen. Um mehr über LaunchServices zu erfahren, finden Sie hier einen Link zur Entwicklerdokumentation von Apple. Wechseln Sie zum Abschnitt LSSetDefaultRoleHandlerForContentType (Seite 48).

John Rygielski
quelle