Ä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.

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.


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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.