Synchronisieren der Adobe Einstellungen auf mehreren Macs

Irgendwann war mein Frust, dass die Einstellungen von verschiedenen Adobe-Programmen (zum Beispiel Photoshop, InDesign oder Lightroom) auf meinem stationären Mac und meinem MacBook nicht immer synchron waren, zu groß und ich habe mich entschlossen, ein kleines Script zu basteln, das die Synchronisierung der Einstellungen übernimmt. In dem Ordner ~/Library/Preferences liegen sehr viele verschiedene Dateien für alle möglichen Adobe-Produkte, die leider nicht gesammelt im Ordner ~/Library/Preferences/Adobe liegen, daher musste ein Script her, was die Synchronisierung übernimmt und neue Dateien automatisch synchronisiert, wenn es regelmäßig aufgerufen wird.

Man benötigt Speicherplatz, auf den von beiden Rechnern zugegriffen werden kann, also zum Beispiel Dropbox, wahlweise mit vorgeschaltetem encfs, wie ich es nutze. Alle Einstellungen werden also von dem Script in das geteilte Verzeichnis geschoben, auf das beide Rechner Zugriff haben.

Zuerst das Script:

#!/bin/bash

SHARED_FOLDER="/Users/sebastian/encfsDropbox/!ADOBE SETTINGS"

IFS="
"

# move existing folders and files to shared space and create links
for adobepath in $(find ~/Library/Preferences \(  -type d -or -type f   \) -maxdepth 1 -iname \*Adobe\* )
do
mkdir -p "${SHARED_FOLDER}${adobepath}"
rsync --delete -a "$adobepath" "${SHARED_FOLDER}$(dirname $adobepath)"/
rm -vr "$adobepath"
ln -vs "${SHARED_FOLDER}$adobepath" "$adobepath"
done

# create links for folders and files which are only in the shared folder
for adobepath in $(find "${SHARED_FOLDER}/Users/$(whoami)/Library/Preferences" \(  -type d -or -type f \) -maxdepth 1 -iname \*Adobe\* )
do
SHARED_FOLDER_ESCAPED=$(printf '%q' "$SHARED_FOLDER" | sed 's/\//\\\//g')
if [ ! -L "$(echo "$adobepath" | sed "s/$SHARED_FOLDER_ESCAPED//")" ]
then
ln -vs "${adobepath}" "$(echo "$adobepath" | sed "s/$SHARED_FOLDER_ESCAPED//")"
fi
done

# delete dead links which name contains "adobe"
find  ~/Library/Preferences -maxdepth 1 -ipath *adobe* -type l | while read f; do if [ ! -e "$f" ]; then echo -n "Remove: "; rm -vf "$f"; fi; done

Adobe speichert alle benutzerabhängigen Einstellungen in ~/Library/Application Support oder in ~/Library/Preferences. In ~/Library/Application Support gibt’s allerdings nur den Adobe-Ordner, der kann auch leicht mittels unison synchronisiert werden. Ich wollte also nur die Einstellungen im Ordner ~/Library/Preferences synchronisieren. Mein Script verschiebt zuerst automatisch alle dort vorhandenen Dateien und Verzeichnisse in deren Namen „Adobe“ oder „adobe“ vorkommt in das geteilte Verzeichnis und legt danach an deren Stelle symbolische Links an. Damit das Ganze auch für mehrere Rechner klappt, wird für ein Verzeichnis, was sich nur im geteilten Ordner befindet, automatisch ein Link angelegt und Links, die nicht mehr auf ein Verzeichnis zeigen, automatisch entfernt.

Damit alles klappt wie gewünscht, sollte man auf dem Rechner, dessen Einstellungen für beide gelten sollen, die Synchronisierung als Letztes durchführen.

In dem Script muss die Variable SHARED_FOLDER angepasst werden. Hierbei wird ein absoluter Pfad erwartet und der Pfad zum Benutzerordner muss angegeben werden (also keine Tilde „~“ benutzen).

Garantie für eventuelle zu viel gelöschte Dateien oder sonstige Probleme übernehme ich natürlich nicht.

Viel Spaß!

Downloads

syncAdobe.sh

FAQ:

1) Warum nicht unison für die Synchronisierung nutzen? Unison unterstützt leider entgegen der Dokumentation in der Version 2.40.63 keine Wildcards. Mein Script unterstützt Wildcards und verschiebt neue Dateien automatisch in das geteilte Verzeichnis und legt die nötigen Links an.

  1. Noch keine Kommentare vorhanden.

  1. Noch keine TrackBacks.