SSH: Wie mit rsync Dinge zwischen Lokal und Remote schieben?

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}
PlatzhalterBeschreibung
{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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert