rsync über SSH verwenden

Führen Sie rsync -avz src/ user@server:/srv/app/ aus. rsync nutzt standardmäßig SSH und sendet nur, was sich geändert hat. Es muss auf beiden Rechnern installiert sein. Der Slash nach src/ bedeutet den Inhalt des Ordners, ohne ihn erhalten Sie /srv/app/src/. Für einen anderen Port fügen Sie -e "ssh -p 2222" hinzu. Bevor Sie --delete benutzen, führen Sie denselben Befehl mit --dry-run aus.

Nur ein paar Dateien von Hand verschieben? Wardterm öffnet die Ordner des Servers neben Ihren, bereit zum Ziehen und Ablegen. Zeigen

Aktualisiert am . rsync 3.5.0 unter Debian 13 zwischen zwei Wegwerf-Containern.

Der Befehl zum Einstieg

rsync -avz src/ user@server:/srv/app/
  • -a kopiert Ordner und behält Rechte, Zeiten und Links bei.
  • -v listet die übertragenen Dateien auf.
  • -z komprimiert während der Übertragung. Das hilft bei Text auf einer langsamen Leitung und bringt bei bereits komprimierten Dateien wenig.

Führen Sie den Befehl zweimal hintereinander aus, und der zweite Lauf listet keine Dateien. Ändern Sie eine Datei, und er listet nur diese.

Welches der drei Werkzeuge passt, zeigt scp, SFTP oder rsync im Vergleich.

Der abschließende Slash

Ein Slash am Ende der Quelle verändert das Ergebnis. Bei einem Ordner namens site:

BefehlErgebnis auf dem Server
rsync -a site server:www/www/site/index.html
rsync -a site/ server:www/www/index.html

Ein Slash am Ende des Ziels macht dabei keinen Unterschied.

Eigener Port oder Schlüssel

rsync -avz -e "ssh -p 2222" src/ user@server:/srv/app/
rsync -avz -e "ssh -i ~/.ssh/id_work" src/ user@server:/srv/app/

Ein Host-Eintrag in Ihrer SSH-Konfiguration funktioniert ebenfalls und ist kürzer: rsync -avz src/ server:/srv/app/.

Große Dateien: Fortschritt und Fortsetzen

rsync -aP big.bin user@server:/tmp/

-P bedeutet --partial --progress. Ohne --partial entfernt rsync eine Datei, die es nicht fertig übertragen hat. Mit der Option bleibt die Teildatei erhalten, und der nächste Lauf nutzt sie. Wir haben eine Übertragung von 30 MB mittendrin gestoppt. Ohne --partial blieb keine Datei auf dem Server. Mit der Option blieben etwa 4 MB übrig, dasselbe rsync -aP beendete die Aufgabe, und die Prüfsummen beider Kopien stimmten überein.

--dry-run und --delete

--delete entfernt Dateien im Ziel, die in der Quelle nicht vorhanden sind. Sehen Sie sich das immer vorher mit --dry-run oder -n an:

$ rsync -avn --delete site/ server:www2/
sending incremental file list
deleting oldfile
...
total size is 9  speedup is 0.05 (DRY RUN)

Die Datei ist danach weiterhin da. Entfernen Sie -n, um es wirklich auszuführen.

Drei Arten, wie --delete schadet

  • Eine leere Quelle leert das Ziel. Ein Probelauf mit einem leeren Ordner empty/ als Quelle wollte alles im Ziel löschen. Ist ein Mount fehlgeschlagen und der Quellordner leer, passiert genau das.
  • Ein falscher Slash löscht mehr als gewollt. Das Ziel wird mit der Quelle so verglichen, wie Sie sie geschrieben haben. Bei site gegen www/ wird also alles andere in www/ gelöscht.
  • Ausschlüsse wirken zusammen. Ausgeschlossene Dateien bleiben unberührt, außer Sie fügen --delete-excluded hinzu. In unserem Test entfernte das debug.log vom Server.

Ein Limit stoppt einen Lauf, der zu viel löschen würde. Er endet mit Code 25:

$ rsync -a --delete --max-delete=1 empty/ server:www2/
Deletions stopped due to --max-delete limit (2 skipped)

Weitere nützliche Formen

AufgabeBefehl
Herunterladenrsync -av server:www/ back/
Dateien überspringenrsync -av --exclude='*.log' site/ server:www/
Sehen, was sich ändern würde und warumrsync -ain site/ server:www/
Fehlende Ordner im Ziel anlegenrsync -a --mkpath site/ server:a/b/c/

Ohne --mkpath scheitert ein Ziel, das mehr als einen Ordner tief liegt, mit mkdir ... failed: No such file or directory.

Fehler

Ist rsync auf dem Server nicht installiert, erhalten Sie Meldungen wie diese, und die Lösung ist, es dort zu installieren:

rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127)

Ein Quellordner, der nicht existiert, ergibt change_dir ... failed: No such file or directory und den Exit-Code 23.

Auf einem Mac

rsync auf dem von uns genutzten Mac ist openrsync und meldet rsync version 2.6.9 compatible. Es kam mit den oben genannten Grundoptionen zurecht, aber seine Hilfe kennt weder --mkpath noch --append-verify. Brauchen Sie diese, installieren Sie mit Homebrew ein neueres rsync.

Fragen

Braucht rsync über SSH rsync auf dem Server?

Ja. rsync läuft auf beiden Seiten. Fehlt es auf dem Server, erhalten Sie remote command not found (code 127).

Wie nutze ich rsync mit einem anderen SSH-Port?

Übergeben Sie den ssh-Befehl mit -e, zum Beispiel rsync -avz -e "ssh -p 2222" src/ user@server:/srv/app/, oder setzen Sie den Port in einem Host-Eintrag in ~/.ssh/config.

Was bedeutet der Schrägstrich am Ende bei rsync?

Bei der Quelle kopiert src/ den Inhalt des Ordners und src den Ordner selbst. Beim Ziel macht er keinen Unterschied.

Quellen

Mehr zu SFTP und Dateiübertragung

Alle Anleitungen