rsync

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