rsync ist ein prak­ti­sches Tool, das den Da­ten­trans­fer über Netzwerke ver­ein­facht und den Abgleich lokaler Ordner be­schleu­nigt. Dank seiner Fle­xi­bi­li­tät ist dieses Syn­chro­ni­sie­rungs­tool ideal für ver­schie­dens­te Aufgaben auf Da­tei­ebe­ne. [TOC]

Was ist rsync?

rsync steht für „remote syn­chro­niza­ti­on“ und ist ein viel­sei­ti­ges, netz­werk­fä­hi­ges Syn­chro­ni­sie­rungs­tool für Linux. Mit diesem Open-Source-Programm gleichst du Dateien und Ver­zeich­nis­se lokal oder über Netz­werk­gren­zen hinweg ab. Das Tool nutzt eine dif­fe­ren­zi­el­le Über­tra­gungs­tech­nik: Es werden nur jene Da­ten­blö­cke über­tra­gen, die sich tat­säch­lich geändert haben. Das spart Band­brei­te und macht den Prozess extrem schnell. Durch zahl­rei­che Optionen hast du die volle Kontrolle über das Syn­chro­ni­sa­ti­ons­ver­hal­ten. Die flexible Syntax erlaubt dir alles – von der einfachen lokalen Kopie bis hin zu komplexen Netzwerk-Backups.

Die Syntax von rsync

Der Aufbau der rsync-Befehle ist logisch und ähnelt Tools wie SSH, SCP oder CP. Die Basis sieht so aus:

rsync [OPTION] source destination
bash

Bei source gibst du den Quellpfad an, während destination das Ziel definiert. world4you empfiehlt dir die Nutzung von Optionen, um den Abgleich genau zu steuern. Hier sind die wich­tigs­ten Parameter:

  • -a (Archive): Übernimmt rekursiv Be­rech­ti­gun­gen, Zeit­stem­pel, Gruppen und Besitzer:innen.
  • -v (Verbose): Liefert dir de­tail­lier­te Infos zum aktuellen Vorgang.
  • -r (Recursive): Syn­chro­ni­siert Ordner inklusive aller Un­ter­ver­zeich­nis­se.
  • -u (Update): Überträgt nur Dateien, die in der Quelle neuer sind als im Ziel.
  • -z (Compress): Kom­pri­miert Daten während der Über­tra­gung für weniger Traffic.
  • -n –itemize-changes: Listet dir alle geplanten Än­de­run­gen präzise auf.
  • --delete: Entfernt Dateien im Ziel, die in der Quelle gelöscht wurden.
  • --exclude: Damit klammerst du spe­zi­fi­sche Daten vom Abgleich aus.
  • --dry-run: Führt einen Testlauf durch, ohne echte Daten zu ver­schie­ben.
  • --progress: Zeigt dir den Fort­schritt der Über­tra­gung in Echtzeit an.
  • --partial: Behält Teil­da­tei­en bei Abbruch bei, damit du später genau dort fort­set­zen kannst.

rsync-Syntax im Einsatz

Schauen wir uns die Anwendung in der Praxis an. Zuerst erstellen wir den Ordner dir1 mit 100 leeren Test­da­tei­en sowie ein leeres Ziel­ver­zeich­nis dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Um den Inhalt von dir1 lokal mit der Option dir2 ab­zu­glei­chen, nutzt du:

$ rsync -r dir1/ dir2
bash

Sicherer fährst du mit -a. Damit kopierst du rekursiv und behältst Links, Zeiten, Gruppen und Rechte bei:

$ rsync -a dir1/ dir2
bash

Wichtiger Tipp: Der Schräg­strich (/) am Ende der Quelle ent­schei­det! Er gibt an, dass der Inhalt des Ordners syn­chro­ni­siert wird und nicht der Ordner selbst.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Vergisst du den Schräg­strich, landet der gesamte Ordner „Quell­ver­zeich­nis“ als Un­ter­ord­ner im „Ziel­ver­zeich­nis“:

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Nutze am besten immer den ab­schlie­ßen­den Slash an der Quelle, damit deine Daten genau dort landen, wo du sie haben willst.

rsync: Abgleich mit einem Remote-System

Die Syn­chro­ni­sa­ti­on mit einem ent­fern­ten Server ist un­kom­pli­ziert. Du benötigst lediglich SSH-Zugriff auf den Ziel­rech­ner und die passenden Login-Daten. rsync nutzt stan­dard­mä­ßig SSH (Secure Shell) für die sichere Ver­bin­dung. Achte darauf, dass rsync auf beiden Systemen in­stal­liert ist.

Sobald die SSH-Ver­bin­dung steht, kannst du den Ordner dir1 über­tra­gen. Hier lassen wir den Slash weg, um das Ver­zeich­nis komplett zu ver­schie­ben:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Schickst du Daten vom lokalen PC zum Server, ist das eine „push“-Operation. Holst du Daten vom Server zu dir lokal, nennen wir das „pull“-Operation. Die Syntax dafür:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Profi-Optionen für rsync

Passe das Verhalten von rsync mit diesen Ein­stel­lun­gen noch genauer an deine Be­dürf­nis­se an.

Ef­fi­zi­en­ter Transfer un­kom­pri­mier­ter Daten

Spar dir Band­brei­te bei un­kom­pri­mier­ten Dateien mit dem Parameter -z:

$ rsync -az source destination
bash

Status checken und Über­tra­gun­gen fort­set­zen

Kom­bi­nie­re --progress und --partial einfach zu -P. So siehst du den Fort­schritts­bal­ken und kannst ab­ge­bro­che­ne Transfers jederzeit wieder aufnehmen:

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Wie­der­holst du den Befehl, ist die Ausgabe kürzer, da rsync via Zeit­stem­pel prüft, was sich wirklich geändert hat.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Ver­zeich­nis­se exakt spiegeln

Für eine iden­ti­sche Kopie musst du Dateien im Ziel löschen, die es in der Quelle nicht mehr gibt. Das erreichst du mit --delete. Sei hier vor­sich­tig, damit du nichts Wichtiges entfernst.

Nutze vorher unbedingt --dry-run. Das ist eine Si­mu­la­ti­on, die dir zeigt, was passieren würde, ohne tat­säch­lich Daten zu löschen. Sicher ist sicher:

$ rsync -a --delete source destination
bash

Daten gezielt vom Abgleich aus­schlie­ßen

Mit --exclude ver­hin­derst du, dass bei­spiels­wei­se Logfiles oder temporäre Dateien über­tra­gen werden.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Möchtest du trotz eines Aus­schluss­mus­ters bestimmte Dateien dennoch mitnehmen, hilft dir die Option --include=.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Sichere Backups erstellen

Die Option --backup erlaubt es dir, Si­che­rungs­ko­pien ge­än­der­ter Dateien auf­zu­be­wah­ren. Mit --backup-dir legst du fest, wo diese Backups landen sollen:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Mehr Details zu diesem Thema findest du in unserem Guide Server-Backups mit rsync.

Zum Hauptmenü