Ich habe die Zuordnung von Dateiassoziationen automatisiert, also die Auswahl des Programms, das eine Datei im Explorer/Finder öffnet. Und ich teile es.
Zunächst das Problem: Dateien mit den benötigten Erweiterungen werden oft standardmäßig von nichts geöffnet, und wenn sie geöffnet werden, dann zum Beispiel von iTunes. Unter Windows gehen die benötigten Assoziationen manchmal bei der Installation (oder sogar Deinstallation) von Programmen verloren: Man löscht etwa GIMP, und plötzlich gehören die ico-Dateien nicht mehr dem gewohnten Datei-Viewer, sondern der Standard-Photo Gallery. Warum? Wozu? Unklar… Und was, wenn man einen neuen Editor gefunden hat oder aus verschiedenen Gründen eine frische Installation benötigt? Was, wenn der Computer nicht der einzige ist? Im Grunde ist das Klicken mit der Maus in Dialogen nicht gerade unterhaltsam.
Stattdessen habe ich zwei Dateien auf Dropbox gespeichert, und jetzt kann ich die Computerwelt fast sofort in den gewohnten Zustand zurückbringen. Worauf habe ich all die Jahre gewartet… Weiter geht’s mit dem Rezept für Windows und macOS.
Windows
In der Windows-Konsole cmd.exe geht das in zwei Schritten:
ftype my_file_txt="C:\Windows\notepad.exe" "%1"
assoc .txt=my_file_txtÄnderungen treten sofort in Kraft. Obwohl die Assoziation für einen bestimmten Benutzer festgelegt ist, müssen diese Befehle aus irgendeinem Grund als Administrator ausgeführt werden. Und vergiss nicht, das Prozentzeichen (%%1) bei der Ausführung aus einer bat-Datei zu doppeln. Die magische Welt von Windows 7 Ultimate 64-Bit…
macOS
In macOS kann die Assoziation bequem mit dem Tool festgelegt werden. Es wird installiert über brew install duti. Beispiel für die Verwendung:
duti -s com.apple.TextEdit .txt "editor"Änderungen treten sofort in Kraft, sudo ist nicht erforderlich. Hier ist das Argument „com.apple.TextEdit“ die sogenannte „Bundle-ID“ des benötigten Programms. Das Argument „editor“ beschreibt den Assoziationstyp: „editor“ zum Bearbeiten, „viewer“ zum Anzeigen, „all“ für alles.
Die „Bundle-ID“ lässt sich so finden: Wenn die Version 3 von „/Applications/Sublime Text.app“ vorhanden ist, lautet die Bundle-ID „com.sublimetext.3“, oder eine andere:
> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3Getestet auf macOS Sierra.
Das finale Skript für Windows (.bat)
@echo off
set XNVIEW=C:\Program Files (x86)\XnView\xnview.exe
set SUBLIME=C:\Program Files\Sublime Text 3\sublime_text.exe
set FOOBAR=C:\Program Files (x86)\foobar2000\foobar2000.exe
call :assoc_ext "%SUBLIME%" txt md js json css java sh yaml
call :assoc_ext "%XNVIEW%" png gif jpg jpeg tiff bmp ico
call :assoc_ext "%FOOBAR%" flac fla ape wav mp3 wma m4a ogg ac3
goto :eof
:assoc_ext
set EXE=%1
shift
:loop
if "%1" neq "" (
ftype my_file_%1=%EXE% "%%1"
assoc .%1=my_file_%1
shift
goto :loop
)
goto :eofEndgültiges Skript für macOS (.sh)
#!/bin/bash
# this allows us terminate the whole process from within a function
trap "exit 1" TERM
export TERM_PID=$$
# check `duti` installed
command -v duti >/dev/null 2>&1 ||
{ echo >&2 "duti required: brew install duti"; exit 1; }
get_bundle_id() {
osascript -e "id of app "${1}"" || kill -s TERM $TERM_PID;
}
assoc() {
bundle_id=$1; shift
role=$1; shift
while [ -n "$1" ]; do
echo "setting file assoc: $bundle_id .$1 $role"
duti -s "$bundle_id" ".${1}" "$role"
shift
done
}
SUBLIME=$(get_bundle_id "Sublime Text")
TEXT_EDIT=$(get_bundle_id "TextEdit")
MPLAYERX=$(get_bundle_id "MPlayerX")
assoc "$SUBLIME" "editor" txt md js jse json reg bat ps1 cfg sh bash yaml
assoc "$MPLAYERX" "viewer" mkv mp4 avi mov webm
assoc "$MPLAYERX" "viewer" flac fla ape wav mp3 wma m4a ogg ac3Quelle: habr.com
