Mac OSX ändert die Dateizuordnung pro Datei in der Befehlszeile

10

Ich muss die mit bestimmten Dateien verknüpfte Anwendung über die Befehlszeile stapelweise ändern. Ich möchte die Dateizuordnung für eine bestimmte Dateierweiterung nicht ändern. Ich möchte tatsächlich auf bestimmte Dateien abzielen, die in einer anderen Anwendung als der Standardzuordnung für diesen Dateityp geöffnet werden sollen. Ich möchte die Standardanwendung für diese Dateierweiterung insgesamt nicht ändern, nur für die spezifischen Dateien, auf die ich abziele.

Im Moment wähle ich alle Dateien aus, die ich im Finder ändern möchte, drücke Option + Befehl + i, um Informationen für mehrere Dateien abzurufen, und ändere die Anwendung für diese Dateien. Es ist irgendwie nervig.

rauben
quelle

Antworten:

6

Diese Informationen werden in der Ressourcengabel der Datei ( Wikipedia ) gespeichert . Diese Ressourcengabeln werden als erweiterte Attribute ( Wikipedia ) angezeigt :

$ ls -l@ somefile.txt 
-rw-r--r--  1 danielbeck  staff  0 18 Mär 19:00 somefile.txt

# setting non-default application using Finder

$ ls -l@ somefile.txt 
-rw-r--r--@ 1 danielbeck  staff  0 18 Mär 19:01 somefile.txt
        com.apple.ResourceFork  1338 

Das Bearbeiten von Grund auf ist wahrscheinlich ziemlich schmerzhaft - viele Binärdaten:

$ xattr -p com.apple.ResourceFork somefile.txt 
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00

Sie können diese Ressourcengabeln jedoch wie Dateien behandeln. Zum Beispiel:

$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2

/..namedfork/rsrc Auf diese Weise wird der Ressourcengabel POSIX-Anwendungen ausgesetzt (dh wahrscheinlich alles, was Sie in Terminal tun).

Sie müssen also nur eine "Vorlagendatei" aus einem vorhandenen Ressourcengabel erstellen (in diesem Beispiel openInSublime2rsrc) und können diese anschließend in Ihre anderen Dateien kopieren.

Daniel Beck
quelle
1
Diese Lösung funktionierte bis Lion. Beim Kopieren in die Datei / rsrc wird der Fehler ": Kein Verzeichnis" angezeigt. Zurück zum ersten Platz :(
Rob
1
@ Rob Versuchen Sie somefile.txt/..namedfork/rsrcstattdessen. somefile.txt/rsrcwurde vor einiger Zeit veraltet.
Daniel Beck
Daniel Beck - du bist ein Lebensretter, vielen Dank.
Rob
Sie müssen die Ressourcengabeln nicht direkt bearbeiten - siehe meine Antwort unten, aber die Zusammenfassung lautet, dass Sie Dienstprogramme namens Rez und DeRez verwenden können, um Ressourcengabeln zu bearbeiten. Da es sich um unterstützte Entwicklertools handelt, ist es weniger wahrscheinlich, dass Sie ein Problem haben.
Mauvedeity
5

In Anlehnung an Daniel Becks Antwort oben werden diese Informationen tatsächlich in der Ressourcengabel der Datei gespeichert. Apple bietet mit den Entwicklertools zwei Dienstprogramme namens "Rez" und "DeRez", mit denen Sie Ressourcengabeln bearbeiten können. Insbesondere können Sie mit Rez einen Ressourcengabel in eine Datei verschieben.

Um die Zuordnung einer einzelnen Datei über die Befehlszeile zu ändern, erstellen Sie zunächst eine Datei des richtigen Typs und ändern Sie die Zuordnung manuell zu der Anwendung, in der sie geöffnet werden soll. Dadurch wird der Ressourcengabel in der Datei erstellt - wenn Sie dies nicht tun. Wenn Sie dies nicht tun, müssen keine Informationen kopiert werden. Ziehen Sie dann die Ressourcengabel mit DeRez wie folgt heraus (vorausgesetzt, Sie verwenden eine Datei foo.txt und die Anwendung, die Sie verwenden möchten, ist Firefox.app).

DeRez foo.txt > foo.r

Dadurch wird eine Datei mit dem Namen foo.r erstellt, bei der es sich um die dekompilierte Ressourcengabelung als Textdatei handelt. Es wird ungefähr so ​​aussehen:

data 'usro' (0) {
    $"0000 001A 2F41 7070 6C69 6361 7469 6F6E"            /* ..../Application */
    $"732F 4669 7265 666F 782E 6170 7000 0000"            /* s/Firefox.app... */
    $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */

Sie können dies bearbeiten, wenn Sie eines von Grund auf neu erstellen möchten, aber Sie müssen das Format genau richtig einstellen, sonst funktioniert es nicht. Es sind nur hexadezimal codierte Zeichen, die den Pfad zum gewünschten App-Bundle beschreiben und mit einer Null abgeschlossen werden.

Möglicherweise wird die Meldung angezeigt, dass der Ressourcengabel leer und nicht initialisiert ist. Wenn dies der Fall ist, haben Sie die Zuordnung pro Datei in der Quelldatei nicht geändert. Führen Sie dies aus und führen Sie den Befehl DeRez erneut aus.

Sobald Sie dies haben, können Sie dies wie folgt in eine andere Datei verschieben (vorausgesetzt, bar.txt existiert):

Rez foo.r -a -o bar.txt

Dadurch wird bar.txt mit der Ressourcengabel von foo.r. aktualisiert.

Um zu überprüfen, ob es funktioniert hat, gehen Sie wie folgt vor, da weder Rez noch DeRez Fehlermeldungen drucken:

DeRez bar.txt

Sie sollten die gleichen Informationen wie zuvor sehen. Öffnen Sie nach all dem einfach die Datei bar.txt wie gewohnt und sie sollte in der richtigen Anwendung geöffnet werden, nicht in der Standardanwendung.

Um eine Stapeländerung durchzuführen, können Sie, sobald Sie die .r-Datei haben, eine Standard-Platzhaltererweiterung wie die folgende verwenden:

Rez foo.r -a -o *.txt

Damit werden alle Dateien ausgeführt, die mit dem Platzhalter übereinstimmen.

Ich habe dies auf 10.7 getan, aber ich verstehe, dass dies auch auf früheren Maschinen funktioniert.

Mauvedeität
quelle
Interessante Informationen zu diesen Tools. Es sieht jedoch so aus, als ob diese Tools nichts tun, was der Zugriff ..namedfork/rsrcnicht auch tut, richtig? Sie tauschen Kenntnisse über (Halb-) Interna gegen Kenntnisse über bestimmte Tools aus - ich bin nicht davon überzeugt, dass dies besser ist.
Daniel Beck
@ DanielBeck Du hast recht, soweit ich weiß. Wie bereits erwähnt, haben sich die internen Informationen mit Lion geändert, während es sich um stabile Entwicklungstools handelt, die versionunabhängig sein sollten. Persönlich finde ich das interne Material interessant, aber die Tools funktionieren eher plattformübergreifend, und ich würde lieber die unterstützten Tools verwenden.
Mauvedeity
3

Ich habe es mit xattr gemacht (es funktioniert perfekt auf APFS-Volume)

xattr -wx com.apple.LaunchServices.OpenWith \
"`xattr -px com.apple.LaunchServices.OpenWith FILEWITHGOODTYPE`" FILETOCHANGE

Sehen Sie sich dieses Thema an, wenn Sie mehr benötigen

Weihnachtsmann
quelle
1

Sie sagen, Sie möchten die Anwendung, die einer bestimmten (Unter-) Gruppe von Dateien eines bestimmten Typs zugeordnet ist, "stapelweise ändern". Teilmenge, weil Sie nicht alle Instanzen dieses Dateityps in diese neue Anwendung ändern möchten.

Es gibt jedoch keine einfache Möglichkeit, dies zu tun. Die Art und Weise, wie LaunchServices herausfindet, welche Anwendung zum Öffnen einer Datei angewiesen werden soll, ist ein mehrstufiger Prozess und hängt von Einstellungen mit unterschiedlichen Bereichen (Benutzer, System usw.) ab.

Aber - Sie können es openin der Befehlszeile verwenden und diesmal anweisen, eine bestimmte App zu verwenden. Dies würde keine Zuordnung ändern, aber es würde das erreichen, was Sie sagen, nämlich eine Reihe von Dateien in einer bestimmten Anwendung öffnen:

open -a <appbundle> <somefile> <anotherfile>

mögen

shiny:t fl$ ls -l
total 1848
-rwxr-xr-x  1 fl  staff    1795 Mar 18 20:03 distribution.pl
-rw-r--r--  1 fl  staff  939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt

und ganz weg von der Kommandozeile: Schauen Sie sich dieses Dienstprogramm an: http://michelf.com/software/magic-launch/

Florenz Kley
quelle
In Ihrem konkreten Beispiel open -a TextWrangler *wäre das noch schneller.
Daniel Beck
Ja, aber das würde der Erklärung die Ebene der Shell-Wildcard-Erweiterung hinzufügen, was das Beispiel weniger verständlich machen würde :-) Nicht so schlecht für Open, aber es gibt andere Tools, die nur Wildcard-Probleme einladen ...
Florenz Kley