layout: ../../../layouts/BlogLayout.astro title: “Die rsync-Trailing-Slash-Falle: Ein Zeichen, das deine Daten löscht” description: “Der häufigste rsync-Fehler: ein Trailing Slash plus —delete kann dein gesamtes Backup löschen. Lerne den Unterschied zwischen /path und /path/, bevor es zu spät ist.” date: “2026-02-27” category: “rsync Guide” readingTime: “2 min” slug: “rsync-trailing-slash-trap” tags: [“rsync”, “linux”, “sysadmin”, “data loss”, “gotchas”] locale: “de”

Wenn rsync eine einzige Stolperfalle hat, dann diese. Ein Zeichen — ein Trailing / — ändert, was kopiert wird. Kombinier das mit --delete, und du kannst dein Zielverzeichnis komplett leeren.

Ich habe das zweimal in Produktion erlebt. Beide Male wusste der Admin genau, was Trailing Slashes bewirken — er hatte nur vergessen, welche Konvention sein letztes Skript verwendet hat.

Der Unterschied

Ohne Trailing Slash — kopiert das Verzeichnis selbst:

rsync -av /srv/data /backup/
# Ergebnis: /backup/data/file1.txt, /backup/data/file2.txt

Mit Trailing Slash — kopiert den Inhalt:

rsync -av /srv/data/ /backup/
# Ergebnis: /backup/file1.txt, /backup/file2.txt

Beides ist in Ordnung. Die Gefahr entsteht beim Wechseln, ohne es zu merken.

Wo es gefährlich wird

Angenommen, dein Backup hat bereits Dateien von einem früheren Durchlauf mit der Variante ohne Slash:

/backup/data/file1.txt
/backup/data/file2.txt

Jetzt führst du die Variante mit Slash plus --delete aus:

rsync -av --delete /srv/data/ /backup/

Datenverlust

rsync sieht /backup/data/ als ein “zusätzliches” Verzeichnis, das im Quellinhalt nicht existiert. Mit --delete entfernt es den gesamten /backup/data/-Baum — dein vorheriges Backup ist weg.

Sichere Gewohnheiten

  1. Wähle eine Konvention und bleib dabei. Die meisten Admins bevorzugen den Trailing Slash (Inhalt kopieren). Sei einfach konsequent.
  2. Immer einen Dry-Run vor --delete. Führe zuerst rsync -avn --delete /srv/data/ /backup/ aus. Keine Ausnahmen. Mach es dir zur Gewohnheit.
  3. Nutze --backup-dir als Sicherheitsnetz. Mit --backup-dir=/backup/.rsync-deleted/ wird alles gesichert, was --delete entfernen würde, sodass du dich von Fehlern erholen kannst.
  4. Mach es zum Alias. Füge das zu deiner .bashrc hinzu, damit Dry-Run der Standard ist:
alias rsyncd='rsync -avn --delete'
# Nutzung: rsyncd /srv/data/ /backup/   (zeigt, was passieren WÜRDE)

Tip

Wenn du --delete ohne --dry-run verwendest, wirst du irgendwann Daten verlieren. Nicht ob. Wann.

Für 30 weitere rsync-Befehle nach Anwendungsfall sortiert, siehe den kompletten rsync-Guide. Und wenn Trailing Slashes genau die Art von Stolperfalle sind, die dich nach einer GUI rufen lassen, handhaben rclone und Robocopy die Quell-/Ziel-Unterscheidung anders.