rsync synchronisiert immer nur in einer Richtung. Für einen gegenseitigen Abgleich müssen also zwei Aufrufe erfolgen:
rsync /verzeichnis1/ /verzeichnis2
rsync /verzeichnis2/ /verzeichnis1
Der / nach der 1. Pfadangabe verhindert, dass der letzte Ordner des 1. Pfads als neuer Ordner unter dem 2. Pfad angelegt wird. Somit bedeuten folgende Aufrufe genau das gleiche:
rsync /home/user/Dokumente /Ziel
rsync /home/user/Dokumente/ /Ziel/Dokumente
rsync -au /verzeichnis1/* /verzeichnis2/
Synchronisation mit Atttributerhaltung, rekursiv und Update
rsync -aeu ssh name@rechner /verzeichnis/
rsync -r -t -p -v –progress -u -l -z -s /verzeichnis1/ /verzeichnis2
Grafische Oberfläche für rsync: grsync
Beispiel
Script um ein lokales Verzeichnis mit einer NFS-Freigabe zu synchronisieren:
#! /bin/bash mountpoint="/mnt/NFS/Ziel" localpath="/home/user" folder[1]="Dokumente" echo "Verzeichnis $mountpoint wird eingebunden ..." mount $mountpoint 2> /dev/null & echo -n "Warte, bis Verzeichnis eingebunden ist " for ((i=1; i<=20; i++)) { [ `mount | grep -c "$mountpoint"` -eq 1 ] && break echo -n "." sleep 1 } echo if [ $i -eq 21 ] ; then echo "Verzeichnis konnte nicht eingebunden werden, Programm wird beendet." kill -9 `ps aux | grep "mount $mountpoint" | awk '{print $2}'` exit fi i=1 while [ "${folder[i]}" != "" ] ; do echo echo "Synchronisiere $localpath/${folder[i]} mit $mountpoint/${folder[i]} ..." rsync -r -t -p -v --progress -u -l -z -s "$localpath/${folder[i]}" "$mountpoint" rsync -r -t -p -v --progress -u -l -z -s "$mountpoint/${folder[i]}" "$localpath" let i++ done echo echo "Verzeichnis $mountpoint wird ausgebunden ..." umount $mountpoint
Bei diesen Script können beliebig viele Ordner, der Freigabe synchronisiert werden z. B.:
folder[1]="Dokumente" folder[2]="Bilder" folder[3]="Videos" ...