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.
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/:
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.
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.
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.
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.
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.