Unter Umständen müssen Dinge von lokal auf einen Server. Dinge wie eine Konfigurationsdatei oder einen Ordner mit ungemein vielen Bildern.
Vielleicht müssen Dinge vom Remote zum lokalen System.
Für solche Zwecke existieren Netzwerkprotokolle und noch viel mehr Umsetzungen. rsync ist einer von beidem.
Hier ein schnelles rsync-Ordner-Datei-Verschieben Intro.
Be aware das rsync kein Core OpenSSH Paket ist, zwar liefern einige Hoster rsync per default mit, im Worst Case muss nachgerüstet werden.
TL;DR
- Einen Remote Ordner mit lokalen Ordner synchronisieren.
rsync -a {ssh-host}:{remote-von}/ /{lokal-zu}
- Einen Lokalen Ordner mit Remote synchronisieren.
rsync -a /{lokal-zu}/ {ssh-host}:{remote-von}
- Remote Änderungen lokal synchronisieren, fehlende Dateien oder Ordner löschen und Status anzeigen.
rsync -ahv --stats --delete {ssh-host}/{remote-von}/ ./{lokal-zu}
Platzhalter | Beschreibung |
{ssh-host} | SSH Host (je nach SSH Config) |
{remote-von} | Server Pfad aus dem kopiert wird. |
{lokal-zu} | Pfad wohin kopiert werden soll. |
Warum rsync überhaupt in Betracht ziehen?
rsync hat einen Vorteil gegenüber den bekannten Größen scp
oder sftp
.
Zugegeben, die Syntax ist nicht ganz scp
mäßig, aber nah dran und um einiges schneller!
Um zu verstehen warum rsync schneller ist, müssen wir verstehen wie rsync seine Dinge tut. Da liefert Wikipedia mit zwei Sätzen das entscheidende:
Ein wichtiges Merkmal von rsync ist, dass es nicht nur ganze Dateien kopieren kann, sondern auch Teile von Dateien. Wurde auf dem Quell-Datenträger eine Datei verändert, werden nur die geänderten Teile dieser Datei auf das Zielsystem übertragen (Delta-Kodierung), womit Zeit gespart wird.
Merken wir uns, rsync ist kein Datei-Von-Zu-Kopierer
sondern ein Datei-Synchonisiationswerkzeug
.
Es vergleicht Dateien und Pfade und setzt die nullen und einsen damit Dinge gleich sind.
Voll cool!
Beispiele
Nehmen wir an wir haben eine SSH-Konfiguration für den Remote-Host baum
.
In Baum finden wir folgende Ordnerstruktur:
├── ~/ziel/config/
└── ~/ziel/uploads/
├── image-1.png
├── [...]
└── image-1337.png
Und Lokal sieht so aus:
├── ./dinge/
│ └── eine-datei
└── ./uploads/
├── image-1.png
├── [...]
└── image-1340.png
Beachte das im lokalen Uploads-Ordner mehr Dateien sind.
Nun spielen wir ein paar Anwendungsfälle durch.
Eine Datei von Lokal in einen Remote Ordner schieben
rsync -a ./dinge/eine-datei baum:~/ziel/config/eine-datei
Erhalten wir keine Fehler, hat es funktioniert.
Kopiere lokalen Ordner in einen Remote Ordner und erhalte Status-Updates
rsync -ahv --stats ./uploads/ baum:~/ziel/uploads
Beachte wie das Trailing Slash (/
) beim Ziel fehlt.
Führen wir den Befehl aus, erhalten wir einige Infos:
- Auflistung synchronisierter Dateien.
- Eine Status ähnlich wie:
Lösche nicht vorhandene Dateien beim Synchronisieren
Zunächst entfernen wir im lokalen Uploads-Ordner alle Inhalte.
Dann können wir den Stand mit folgendem Befehl aktualisieren:
rsync -ahv --stats --delete ./uploads/ baum:~/ziel/uploads
Et voilà, schon wurde der Uploads-Ordner gesäubert.
Schreibe einen Kommentar