Standardmäßig löscht rsync
keine Dateien auf der Zielseite. Damit rsync
überhaupt Dateien löscht, müssen Sie mindestens eine der Löschoptionen verwenden.
Wenn es Ihnen egal ist, wann Dateien gelöscht werden, verwenden Sie einfach --delete
und überlassen Sie die Auswahl rsync
. Sie können --delete
mit anderen Löschoptionen kombinieren (dies führt nicht zu Konflikten), müssen es aber nicht, da alle anderen Löschoptionen bereits --delete
implizieren.
--delete-before
funktioniert wie folgt: rsync
schaut, welche Dateien in der Quelle und welche im Ziel vorhanden sind, löscht alle Dateien, die im Ziel, aber nicht in der Quelle gefunden werden und startet dann die eigentliche Synchronisation. Diese Reihenfolge ist nützlich, wenn das Ziel wenig Speicherplatz hat, da es zuerst mehr Speicherplatz am Ziel freigibt, bevor es mit der Übertragung neuer Dateien beginnt. Der Nachteil ist, dass rsync
mehr Speicher für die Durchführung des Vorgangs benötigt und der gesamte Vorgang in zwei Schritten abläuft und somit langsamer ist.
--delete-during
funktioniert wie folgt: rsync
beginnt sofort mit dem Synchronisieren von Dateien und wenn es auf eine Datei stößt, die nur am Zielort existiert, wird diese gelöscht. Auf diese Weise gibt es keine Geschwindigkeitseinbußen und es wird auch kein zusätzlicher Speicher benötigt. Der Nachteil ist, dass es passieren kann, dass zuerst viele neue Dateien in die Ziele kopiert werden, bevor entfernte Dateien gelöscht werden, so dass das Ziel während des Vorgangs viel mehr Speicherplatz benötigt, als es am Ende benötigt, wenn der gesamte Vorgang abgeschlossen ist.
--delete-after
funktioniert wie folgt: Zuerst werden alle Dateien synchronisiert, dann wird die gleiche Operation durchgeführt, die --delete-before
vor der Synchronisierungsphase durchführt. Dies ist in den meisten Fällen die schlechteste Wahl, da sie den meisten Speicher benötigt, den meisten Speicherplatz am Zielort und sie ist langsamer, da es sich um einen zweistufigen Prozess handelt; im Grunde kombiniert sie alle Nachteile der anderen beiden Methoden. Diese Option existiert hauptsächlich für den Fall, dass Sie “Zusammenführungsdateien” verwenden (was Zusammenführungsdateien sind und wie sie funktionieren, geht über den Rahmen dieser Antwort hinaus). Da diese Dateien Regeln für Dateien enthalten können, die beim Löschen ausgeschlossen werden sollen, müssen neue Zusammenführungsdateien vor der Löschphase kopiert werden, wenn ihr Inhalt während der Löschphase berücksichtigt werden soll. Wenn das keine Anforderung ist, hat --delete-after
keinen Vorteil.
--delete-delay
ist eine ziemlich neue Option (sie ist in rsync
2.6.9 nicht verfügbar, was z. B. in macOS 10.15 noch der Standard ist). Sie funktioniert wie --delete-during
, nur dass sie Dateien nicht sofort löscht, sondern erst nach der Synchronisation, ist also eine Mischung aus --delete-during
und --delete-after
. Der Vorteil ist, dass es schneller ist als --delete-after
, der Nachteil ist, dass es mehr Speicher während der Synchronisation benötigt.
--delete-excluded
weist rsync
an, nicht nur Dateien zu löschen, die in der Quelle fehlen, sondern auch Dateien am Ziel zu löschen, die von der Synchronisation ausgeschlossen wurden (--exclude
oder --exclude-from
), unabhängig davon, ob diese Dateien in der Quelle tatsächlich existieren würden oder nicht.