rsync - Verzeichnisse spiegeln
 

Um Verzeichnisse inklusive Unterverzeichnissen komplett zu spiegeln reicht folgender Befehl:

# rsync -av --delete /Quellverzeichnis/ /Zielverzeichnis/

-a = Archiv-Mode, d.h. es wird das gesamte Verzeichniss samt Unterverzeichnissen kopiert.
-v = verbose, rsync gibt Informationen aus über das, was es tut.
--delete = Dateien die nur im Zielverzeichnis vorhanden sind werden gelöscht.

Es wird

  • eine Kopie erstellt, falls die Datei im Zielverzeichnis fehlt.
  • die Datei gelöscht, falls sie im Zielverzeichnis vorhanden ist, aber im Quellverzeichnis fehlt.
  • die Änderungen im Zielverzeichnis gespeichert, falls die Datei im Quellverzeichnis sich von der Datei im Zielverzeichnis unterscheidet.

Einfach ausgedrückt: das Quellverzeichnis wird exakt im Zielverzeichnis gespiegelt!

Vorsicht mit dem Slash

Etwas Vorsicht ist geboten mit dem Slash / nach dem Quellverzeichnis, denn dieser ändert das Kopierverhalten von rsync. Dabei ist zu unterscheiden zwischen "kopiere den Inhalt dieses Ordners" und "kopiere das Verzeichnis mit Name". Ohne Slash wird das gesamte Verzeichnis samt Ordner ins Zielverzeichnis kopiert. Mit Slash wird der Inhalt mit dem Zielverzeichnis abgeglichen! Ein Beispiel soll das veranschaulichen. Diese beiden Befehl kopieren exakt gleich:

# rsync -av /src/foo /dest
# rsync -av /src/foo/ /dest/foo

Im Netzwerk

Übers Netzwerk kopieren geht mit rsync natürlich auch. Dabei muß rsync auf beiden Linux-Rechnern installiert sein. rsync bedient sich dabei mittlerweile standardmäßig ssh um sicher über das Netzwerk zu kopieren. Der Befehl ähnelt dem scp-Befehl:

# rsync -av --delete udo@heim-pc:/Quelle/ /Ziel/

oder auch umgekehrt:

# rsync -av --delete /Quelle/ udo@heim-pc:/Ziel/

wie gesagt, ssh wird in neueren rsync Versionen standarmäßig eingesetzt. In Älteren mußte man es explizit mit -e angeben:

# rsync -e ssh -av --delete /Quelle/ udo@heim-pc:/Ziel/

Mit Windows

Es ist auch möglich Verzeichnisse mit Windows-Rechnern abzugleichen. Dazu bedient man sich des Befehls smbmount (siehe Kapitel "Netzwerk", Beitrag smbmount), welcher die Windows-Freigabe in den Verzeichnisbaum einhängt. Dadurch kann man auf die Windows-Freigabe mit rsync wie auf ein lokales Verzeichnis zugreifen.