rsync — Dateien effizient synchronisieren und sichern
Praxis-Guide zu rsync — überträgt nur Datei-Unterschiede zwischen Quelle und Ziel: ideal für Backups, Spiegelung und Remote-Sync per SSH.
rsync ist das Standardwerkzeug, um Dateien und ganze Verzeichnisbäume schnell zu kopieren und zu synchronisieren – lokal wie über SSH. Der Clou ist der Delta-Algorithmus: rsync überträgt nur die Teile, die sich seit dem letzten Lauf geändert haben, statt jedes Mal alles neu zu schicken. Das macht es zur ersten Wahl für Backups, Website-Deployments, Verzeichnis-Spiegelung und inkrementelle Snapshots. Dieser Guide zeigt dir die wichtigsten Optionen für den Alltag – vom Archiv-Modus über Filterregeln bis zum spiegelnden --delete.
Grundlagen
rsync <source> <destination> — Kopiert eine Datei lokal von der Quelle zum Ziel.
rsync file.txt /backup/file.txtrsync -r <source_dir> <destination_dir> — Kopiert ein Verzeichnis rekursiv. Achtung: Der abschließende Schrägstrich an der Quelle macht einen Unterschied.
rsync -r ./project/ /backup/project/rsync -a <source> <destination> — Archiv-Modus. Bewahrt Berechtigungen, Zeitstempel, Symlinks, Eigentümer und Gruppe. Das meistgenutzte Flag.
rsync -a ./project/ /backup/project/rsync -av <source> <destination> — Archiv-Modus mit ausführlicher Ausgabe. Zeigt jede übertragene Datei an.
rsync -av ./project/ /backup/project/rsync -avh <source> <destination> — Archiv-Modus mit ausführlicher Ausgabe und gut lesbaren Dateigrößen.
rsync -avh ./photos/ /backup/photos/Verhalten des abschließenden Schrägstrichs
rsync -a <source_dir>/ <destination_dir>/ — Schrägstrich an der Quelle: kopiert den Inhalt von source_dir in destination_dir.
rsync -a ./project/ /backup/project/rsync -a <source_dir> <destination_dir>/ — Kein Schrägstrich an der Quelle: kopiert source_dir selbst in destination_dir (legt destination_dir/source_dir/ an).
rsync -a ./project /backup/Remote-Übertragungen (SSH)
rsync -avz <source> <user>@<host>:<destination> — Kopiert lokale Dateien per SSH mit Kompression auf einen entfernten Server.
rsync -avz ./dist/ deploy@server.com:/var/www/html/rsync -avz <user>@<host>:<source> <destination> — Kopiert Dateien von einem entfernten Server auf die lokale Maschine.
rsync -avz deploy@server.com:/var/www/html/ ./backup/rsync -avz -e "ssh -p <port>" <source> <user>@<host>:<destination> — Nutzt einen abweichenden SSH-Port für die Übertragung.
rsync -avz -e "ssh -p 2222" ./files/ user@server.com:/data/rsync -avz -e "ssh -i <keyfile>" <source> <user>@<host>:<destination> — Nutzt einen bestimmten privaten SSH-Schlüssel zur Authentifizierung.
rsync -avz -e "ssh -i ~/.ssh/deploy_key" ./dist/ deploy@server.com:/var/www/rsync -avz <user>@<host1>:<source> <user>@<host2>:<destination> — Synchronisiert Dateien zwischen zwei entfernten Servern (die Daten laufen über die lokale Maschine).
rsync -avz user@server1.com:/data/ user@server2.com:/backup/Trockenlauf & Fortschritt
rsync -avn <source> <destination> — Trockenlauf. Zeigt an, was übertragen würde, ohne es tatsächlich zu tun.
rsync -avn ./project/ /backup/project/rsync -av --progress <source> <destination> — Zeigt den Übertragungsfortschritt pro Datei mit Tempo und Restzeit an.
rsync -av --progress ./large-files/ /backup/large-files/rsync -av --stats <source> <destination> — Zeigt am Ende eine Zusammenfassung der Übertragungsstatistik an.
rsync -av --stats ./project/ /backup/project/rsync -av --info=progress2 <source> <destination> — Zeigt den Gesamtfortschritt statt des Fortschritts pro Datei an.
rsync -av --info=progress2 ./photos/ /backup/photos/Löschen & Spiegeln
rsync -av --delete <source> <destination> — Löscht im Ziel Dateien, die in der Quelle nicht mehr existieren, und macht das Ziel zum exakten Spiegelbild. Destruktiv: vorher unbedingt einen Trockenlauf mit -n/--dry-run machen.
rsync -av --delete ./website/ /var/www/html/rsync -av --delete-after <source> <destination> — Löscht überzählige Dateien erst nach Abschluss der Übertragung (sicherer als der Standard).
rsync -av --delete-after ./website/ /var/www/html/rsync -av --delete-excluded <source> <destination> — Löscht im Ziel auch die ausgeschlossenen Dateien.
rsync -av --delete-excluded --exclude='*.tmp' ./project/ /backup/rsync -av --force --delete <source> <destination> — Erzwingt das Löschen nicht-leerer Verzeichnisse im Ziel.
rsync -av --force --delete ./project/ /backup/project/Ein- & Ausschluss-Filter
rsync -av --exclude='<pattern>' <source> <destination> — Schließt Dateien, die auf ein Muster passen, von der Übertragung aus.
rsync -av --exclude='node_modules' ./project/ /backup/project/rsync -av --exclude='*.log' --exclude='*.tmp' <source> <destination> — Schließt mehrere Muster durch Wiederholen des Flags aus.
rsync -av --exclude='*.log' --exclude='*.tmp' ./app/ /backup/app/rsync -av --exclude-from='<file>' <source> <destination> — Liest Ausschluss-Muster aus einer Datei (ein Muster pro Zeile).
rsync -av --exclude-from='.rsyncignore' ./project/ /backup/project/rsync -av --include='<pattern>' --exclude='*' <source> <destination> — Überträgt nur Dateien, die auf ein Muster passen, und schließt alles andere aus.
rsync -av --include='*.jpg' --exclude='*' ./photos/ /backup/photos/rsync -av --filter='- <pattern>' <source> <destination> — Nutzt Filterregeln für feingranulare Kontrolle. Präfix '-' schließt aus, '+' schließt ein.
rsync -av --filter='- *.log' --filter='- /tmp/' ./app/ /backup/app/rsync -av --include='*/' --include='*.php' --exclude='*' <source> <destination> — Synchronisiert nur bestimmte Dateitypen und behält dabei die Verzeichnisstruktur bei.
rsync -av --include='*/' --include='*.php' --exclude='*' ./src/ /backup/src/Kompression & Bandbreite
rsync -avz <source> <destination> — Komprimiert die Daten während der Übertragung. Nützlich für Remote-Übertragungen über langsame Verbindungen.
rsync -avz ./project/ user@server.com:/backup/rsync -avz --compress-level=<level> <source> <destination> — Setzt die Kompressionsstufe (0-9). Höher bedeutet bessere Kompression, aber langsamer.
rsync -avz --compress-level=9 ./data/ user@server.com:/backup/rsync -av --bwlimit=<kbps> <source> <destination> — Begrenzt die Übertragungsbandbreite in Kilobyte pro Sekunde.
rsync -av --bwlimit=5000 ./large-files/ user@server.com:/backup/Berechtigungen & Eigentümer
rsync -av --chmod=<permissions> <source> <destination> — Setzt bestimmte Berechtigungen auf den Ziel-Dateien.
rsync -av --chmod=D755,F644 ./website/ /var/www/html/rsync -av --chown=<user>:<group> <source> <destination> — Setzt Eigentümer und Gruppe auf den Ziel-Dateien (erfordert root).
rsync -av --chown=www-data:www-data ./website/ /var/www/html/rsync -av --no-perms <source> <destination> — Bewahrt die Datei-Berechtigungen nicht.
rsync -av --no-perms ./files/ /shared/files/rsync -av --no-owner --no-group <source> <destination> — Bewahrt die Eigentümer- und Gruppen-Informationen nicht.
rsync -av --no-owner --no-group ./files/ /backup/files/Teilübertragungen & Fortsetzen
rsync -avP <source> <destination> — Zeigt den Fortschritt und behält Teildateien. Entspricht --partial --progress. Erlaubt das Fortsetzen abgebrochener Übertragungen.
rsync -avP ./large-file.iso user@server.com:/data/rsync -av --partial <source> <destination> — Behält teilweise übertragene Dateien, damit sie später fortgesetzt werden können.
rsync -av --partial ./backup.tar.gz user@server.com:/backup/rsync -av --partial-dir=<dir> <source> <destination> — Legt Teildateien in einem separaten Verzeichnis ab statt am Zielort.
rsync -av --partial-dir=.rsync-partial ./data/ user@server.com:/data/rsync -av --append-verify <source> <destination> — Setzt die Übertragung durch Anhängen an Teildateien fort und prüft sie per Prüfsumme.
rsync -av --append-verify ./large-file.tar user@server.com:/data/Prüfsumme & Verifizierung
rsync -avc <source> <destination> — Nutzt die Prüfsumme statt Änderungszeit und Größe, um zu entscheiden, welche Dateien übertragen werden.
rsync -avc ./important-data/ /backup/important-data/rsync -av --checksum <source> <destination> — Überspringt Dateien anhand der Prüfsumme statt der Änderungszeit. Langsamer, aber genauer.
rsync -av --checksum ./data/ /mirror/data/rsync -av --ignore-existing <source> <destination> — Überspringt Dateien, die am Ziel bereits existieren.
rsync -av --ignore-existing ./new-files/ /archive/rsync -av --update <source> <destination> — Überspringt Dateien, die am Ziel neuer sind.
rsync -av --update ./project/ /shared/project/Backup & Versionierung
rsync -av --backup --suffix='.<date>' <source> <destination> — Legt von überschriebenen Dateien Backup-Kopien mit einem eigenen Suffix an.
rsync -av --backup --suffix='.bak' ./config/ /etc/app/rsync -av --backup --backup-dir=<dir> <source> <destination> — Verschiebt überschriebene oder gelöschte Dateien in ein separates Backup-Verzeichnis.
rsync -av --backup --backup-dir=/backup/old/ ./website/ /var/www/html/rsync -av --link-dest=<dir> <source> <destination> — Verknüpft unveränderte Dateien per Hardlink mit einem früheren Backup. Erzeugt platzsparende inkrementelle Backups.
rsync -av --link-dest=/backup/2024-01-01/ ./data/ /backup/2024-01-02/Praxis-Rezepte
rsync -avz --delete <source>/ <user>@<host>:<destination>/ — Website deployen: lokales Verzeichnis auf den Remote-Server spiegeln, veraltete Dateien entfernen. Wegen --delete vorher mit --dry-run prüfen.
rsync -avz --delete ./dist/ deploy@server.com:/var/www/html/rsync -avz --exclude='.git' --exclude='node_modules' <source>/ <destination>/ — Ein Projekt synchronisieren und dabei Versionsverwaltung und Abhängigkeits-Verzeichnisse ausschließen.
rsync -avz --exclude='.git' --exclude='node_modules' ./project/ /backup/project/rsync -av --delete --link-dest=<prev_backup> <source>/ <new_backup>/ — Ein inkrementelles Backup mit Hardlinks auf das vorherige Backup erstellen.
rsync -av --delete --link-dest=/backup/daily.1/ /home/user/ /backup/daily.0/rsync -avz --progress -e ssh <source>/ <user>@<host>:<destination>/ — Vollständige Remote-Synchronisation mit Kompression, Fortschrittsanzeige und SSH.
rsync -avz --progress -e ssh ./photos/ user@nas.local:/volume1/photos/rsync -av --dry-run --delete <source>/ <destination>/ — Eine Synchronisation mit Löschungen vorab anzeigen. Vor jedem Einsatz von --delete immer zuerst einen Trockenlauf machen.
rsync -av --dry-run --delete ./website/ /var/www/html/ Fazit
rsync ist robust, überall verfügbar und durch seinen Delta-Transfer unschlagbar effizient – ein Werkzeug, das sich für simple Kopien ebenso eignet wie für ausgefeilte inkrementelle Backup-Strategien mit --link-dest. Größte Gefahr ist --delete: Ein falsch gesetzter Schrägstrich oder ein vertauschtes Quell-/Ziel-Argument löscht im Ernstfall die falschen Daten. Gewöhne dir an, jede spiegelnde Synchronisation zuerst mit -n/--dry-run zu prüfen, und achte penibel auf die Schrägstrich-Semantik der Pfade.
Weiterführende Links
- rsync – offizielle Projektseite – Downloads, Manpage und Dokumentation (englisch)
- rsync – Wikipedia – Hintergrund, Funktionsweise und Geschichte des Delta-Algorithmus
Verwandte Kommandos
- borgbackup – deduplizierende, komprimierte und verschlüsselte Backups
- duplicity – verschlüsselte inkrementelle Backups auf viele Speicherziele
- rclone – Synchronisation mit Cloud-Speicher wie S3, Google Drive & Co.