Layer 8Ehrlicher Tech-Support

rsync hat den Ordner in den Ordner kopiert – der Schrägstrich

Ein Schrägstrich am Quellpfad entscheidet, ob rsync den Ordner oder seinen Inhalt kopiert. So entsteht daten/daten/ – und so verhindert -n es.

Aufwand:
ca. 10 Min.
Voraussetzung:
rsync, Terminal
Gilt für:
rsync (Linux, macOS, BSD)

Das Symptom

Die Sicherung lief durch, ohne Fehlermeldung, mit hübscher Dateiliste. Am Ziel liegt dann aber nicht der erwartete Inhalt, sondern /sicherung/daten/ – und nach dem dritten Versuch /sicherung/daten/daten/. Oder, in der unangenehmen Variante mit --delete: Am Ziel fehlt plötzlich fast alles, was vorher dort lag. Der Befehl war beide Male syntaktisch korrekt. Er hat nur etwas anderes gemacht, als der Mensch davor gemeint hat.

Die „Layer 8“-Wahrheit

Der ganze Unterschied ist ein einziges Zeichen, und rsync ist damit nicht launisch, sondern penibel. Die Handbuchseite sagt es klar: Ein abschließender Schrägstrich an der Quelle sorgt dafür, dass am Ziel keine zusätzliche Verzeichnisebene entsteht. Man darf sich das / an der Quelle als „kopiere den Inhalt dieses Verzeichnisses“ denken – ohne Schrägstrich heißt es „kopiere das Verzeichnis unter seinem Namen“. Beides ist sinnvoll, beides wird gebraucht, und keines der beiden ist ein Fehler. Der Fehler entsteht erst dort, wo jemand einen Befehl aus dem Verlauf holt, das Ziel ändert und annimmt, der Rest bedeute schon das Richtige. Richtig unangenehm wird es in Gesellschaft von --delete, das laut Handbuchseite überzählige Dateien aus den Zielverzeichnissen entfernt: Zeigt die Quelle wegen des fehlenden Schrägstrichs auf die falsche Ebene, ist am Ziel fast alles überzählig. Dagegen gibt es ein Gegenmittel, das seit Jahrzehnten eingebaut ist und trotzdem übersprungen wird, weil man ja weiß, was man tut: -n führt den Lauf durch, ohne etwas zu ändern. Wer --delete benutzt und -n nicht, hat sich für den spannenden Weg entschieden.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Den Unterschied einmal bewusst ansehen

    Zwei Befehle, ein Zeichen Unterschied, zwei verschiedene Ergebnisse. Ohne Schrägstrich entsteht /sicherung/daten/, mit Schrägstrich landen die Dateien direkt in /sicherung/. Wer die Sicherung mehrfach falsch laufen ließ, findet am Ziel entsprechend /sicherung/daten/daten/:

    rsync -av /quelle/daten  /sicherung/
    rsync -av /quelle/daten/ /sicherung/
    
  2. 2.

    Immer zuerst den Probelauf starten

    Die Option -n führt den Lauf durch, ohne etwas zu ändern, und zeigt jede Datei, die übertragen würde. In der Ausgabe steht der Zielpfad – daran erkennt man sofort, ob eine unerwünschte Ebene entsteht:

    rsync -avn /quelle/daten/ /sicherung/
    
  3. 3.

    Erst nach bestandenem Probelauf ohne -n wiederholen

    Sieht die Liste richtig aus, wird derselbe Befehl ohne das n ausgeführt. Nicht neu tippen, sondern das Zeichen aus dem Verlauf entfernen – die häufigste Ursache für einen abweichenden Lauf ist ein zweiter, leicht anderer Befehl:

    rsync -av /quelle/daten/ /sicherung/
    
  4. 4.

    Bei --delete den Probelauf zur Pflicht machen

    Achtung: --delete löscht überzählige Dateien in den Zielverzeichnissen und kann bei falschem Quellpfad große Teile des Ziels unwiederbringlich entfernen. Der Probelauf listet vorher jede Löschung auf. Diese Liste liest man Zeile für Zeile, bevor das n fällt:

    rsync -avn --delete /quelle/daten/ /sicherung/
    
  5. 5.

    Eine bereits entstandene Extra-Ebene aufräumen

    Ist der Ordner-im-Ordner schon da, hebt man den Inhalt eine Ebene an und entfernt erst danach die leere Hülle. Vorher mit ls kontrollieren, dass wirklich der überflüssige Pfad gemeint ist – ein Tippfehler trifft hier die Sicherung selbst:

    ls -la /sicherung/daten/
    rsync -av /sicherung/daten/ /sicherung/
    rm -r /sicherung/daten
    
  6. 6.

    Den Merksatz in Skripte gießen

    In automatisierten Sicherungen steht der Pfad nur einmal geschrieben und läuft danach jahrelang unbeobachtet. Deshalb dort den Schrägstrich bewusst setzen, den Befehl vor der ersten scharfen Ausführung einmal mit -n prüfen und -v nicht wegoptimieren – ein Protokoll, das niemand liest, ist immer noch besser als keines.

Häufige Fragen (FAQ)

?Was genau bewirkt der Schrägstrich am Ende des Quellpfads?

Er entscheidet, ob der Ordner selbst oder sein Inhalt übertragen wird. Die Handbuchseite formuliert es als Merksatz: Ein abschließender Schrägstrich an der Quelle ändert das Verhalten so, dass keine zusätzliche Verzeichnisebene am Ziel angelegt wird – man kann sich ein abschließendes / an der Quelle als kopiere den Inhalt dieses Verzeichnisses denken, im Gegensatz zu kopiere das Verzeichnis unter seinem Namen. Ohne Schrägstrich landet also der Ordner im Zielordner, mit Schrägstrich landet dessen Inhalt direkt darin.

?Gilt dasselbe auch für den Zielpfad?

Die Handbuchseite bezieht diese Regel ausdrücklich auf die Quelle. Der Zielpfad benennt schlicht das Verzeichnis, in das übertragen wird. Weil sich das im Kopf trotzdem gern vermischt, ist die einzig vernünftige Gewohnheit, es nicht zu erraten: Probelauf mit -n starten und die ausgegebenen Pfade lesen. Was dort steht, ist die Wahrheit über den Befehl, den man gerade tippt – nicht die Erinnerung an das letzte Mal.

?Warum ist die Kombination mit --delete so gefährlich?

Weil --delete laut Handbuchseite überzählige Dateien aus den Zielverzeichnissen löscht – also alles, was am Ziel liegt, aber an der Quelle nicht vorkommt. Hat man wegen des fehlenden Schrägstrichs die falsche Ebene als Quelle angegeben, ist plötzlich fast der gesamte Zielinhalt überzählig. rsync tut dann exakt, was man ihm gesagt hat, und räumt gründlich auf. Deshalb gehört --delete nie in einen Befehl, der nicht vorher als Probelauf gelaufen ist.

?Was macht --dry-run beziehungsweise -n wirklich?

Laut Handbuchseite führt -n einen Probelauf ohne jede Änderung durch. rsync ermittelt also die vollständige Liste dessen, was es übertragen und – bei --delete – löschen würde, und schreibt sie auf den Bildschirm, ohne eine einzige Datei anzufassen. Das kostet ein paar Sekunden und ist der billigste Versicherungsschutz, den die Kommandozeile zu bieten hat.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

  1. [1]
    rsync(1) – Linux manual page (man7.org)

    man7.org · abgerufen am

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWSystemzerstörend

Die Sicherung wurde nie zurückgespielt

Eine Sicherung, die niemand je wiederhergestellt hat, ist eine Hoffnung. Das BSI verlangt den Test ausdrücklich – so führt man ihn durch.

SWSystemzerstörend

RAID ist kein Backup

Der RAID-Verbund lief, trotzdem sind die Daten weg. RAID schützt vor Plattenausfall – nicht vor Löschen, Verschlüsselung oder Feuer.

HWSystemzerstörendS.M.A.R.T. Status BAD

S.M.A.R.T. Status BAD beim Booten

Das BIOS warnt 'S.M.A.R.T. Status BAD, Backup and Replace'? Deine Festplatte kündigt ihren Ausfall an. So sicherst du Daten und prüfst den Zustand.