Was sind die Unterschiede zwischen den rsync-Löschoptionen?

Ich sehe auf der rsync Manpage , dass es eine Reihe von delete Optionen gibt, verstehe aber die Unterschiede zwischen ihnen nicht wirklich. Was sind die Unterschiede zwischen diesen Optionen?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs
 145
Author: killermist, 2010-06-25

4 answers

  • --del/--delete_during: Löscht Dateien aus dem Zielverzeichnis, wenn sie kopiert werden (speichert Speicher im Vergleich zu --delete-before: --delete-before führt einen separaten Scan durch, um nach löschbaren Dateien zu suchen)

  • --delete: Löscht Dateien im Zielverzeichnis, wenn sie nicht im Quellverzeichnis vorhanden sind.

  • --delete-before: Löschen Sie Dateien im Zielverzeichnis, bevor Sie file-with-same-name aus dem Quellverzeichnis

  • --delete-during: Dateien im Zielverzeichnis löschen BEIM Kopieren von file-with-same-name aus dem Quellverzeichnis

  • --delete-delay: Mark löscht während der Übertragung, aber warten, bis die Übertragung abgeschlossen ist

  • --delete-after: Empfänger löscht nach der Übertragung, nicht vor...Wenn ein anderer Teil des rsync zusätzliche Dateien an eine andere Stelle verschoben hat, möchten Sie dies anstelle von --delete-delay, da --delete-delay entscheidet, was mitten in der Übertragung gelöscht wird, während --delete-after das Verzeichnis nach Dateien sucht, die gelöscht werden sollen, nachdem alles gelöscht wurde fertig.

  • --delete-excluded: Löscht Dateien aus dem Zielverzeichnis, die explizit von der Übertragung aus dem Quellverzeichnis ausgeschlossen sind.

Der Punkt von rsync kopiert nicht, sondern archiviert. Dies ist eine wichtige Unterscheidung. Die Verarbeitung gelöschter / geänderter Dateien ist kritisch und in vielen Fällen nuanciert.

Insbesondere die Flagge --delete ist eine, die ich schon oft vermasselt gesehen habe. Viele Leute verwenden rsync, um Dateien in Speicher mit niedriger Priorität zu verschieben, und in diesem Fall möchten Sie, dass die Dateien, die Sie verschieben, weiterhin im Zielverzeichnis VORHANDEN sind. Das macht delete nicht: --delete stellt sicher, dass beim Löschen einer Datei aus dem Quellverzeichnis AUCH diese aus Ihrem Zielverzeichnis gelöscht wird, damit Ihr Ziel nicht voller Müll ist... Ich habe einmal gesehen, wie ein Typ sein Backup gelöscht hat, indem er ein neues Laufwerk eingelegt und sein nächtliches Rsync-Skript nicht ausgeschaltet hat. Das Skript sah, dass das Quellverzeichnis jetzt leer war, und löschte jede Datei im Zielverzeichnis, also würden sie passen.

Die meisten anderen Optionen sind Leerzeichen-oder leistungsbezogen. Wenn Sie die Dateien löschen, ist wichtig, wenn Sie sicherstellen möchten, dass die Übertragung erfolgreich ist, bevor Sie etwas tun, aber wenn Ihr Gerät zu klein ist, um 2 Kopien aller Informationen zu verarbeiten, müssen Sie löschen, wie Sie gehen, usw. Es ist ein wenig verrückt wegen seiner langen Geschichte über mehrere Plattformen hinweg: Einige Optionen wurden hinzugefügt, damit Menschen, die an bestimmtes Verhalten gewöhnt waren, nicht verwirrt werden.

 148
Author: Satanicpuppy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-09-10 20:41:24

Standardmäßig löscht rsync keine Dateien auf der Zielseite. Damit rsync Dateien überhaupt 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 steht nicht in Konflikt), müssen dies jedoch nicht, da alle anderen Löschoptionen bereits --delete implizieren.

--delete-before funktioniert wie folgt: rsync sieht aus, welche Dateien an der Quelle vorhanden sind und welche Dateien am Ziel vorhanden sind, löscht alle Dateien am Ziel gefunden, aber nicht an der Quelle 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 mit der Übertragung neuer Dateien begonnen wird. Der Nachteil ist, dass rsync mehr Speicher benötigt, um die Operation auszuführen, und die gesamte Operation ist ein zweistufiger Prozess und somit langsamer.

--delete-during werke als folgt: rsync beginnt sofort mit der Synchronisierung von Dateien und wenn es auf eine Datei stößt, die nur am Ziel vorhanden ist, wird sie gelöscht. Auf diese Weise gibt es keine Geschwindigkeitsstrafe und es ist auch kein zusätzlicher Speicher erforderlich. Der Nachteil ist, dass es vorkommen kann, dass zuerst viele neue Dateien an die Ziele kopiert werden, bevor entfernte Dateien gelöscht werden, so dass das Ziel während des Vorgangs möglicherweise viel mehr Speicherplatz benötigt, als es am Ende benötigt, sobald der gesamte Vorgang abgeschlossen ist erfolgen.

--delete-after funktioniert wie folgt: Synchronisieren Sie zuerst alle Dateien und führen Sie dann denselben Vorgang aus, den --delete-before vor der Synchronisierungsphase ausführt. Dies ist die schlechteste Wahl in den meisten Fällen, da es den meisten Speicher benötigt, die meisten Speicherplatz am Ziel, und es ist langsamer, da es ein zweistufiger Prozess ist; im Grunde vereint es alle Nachteile der beiden anderen Methoden. Diese Option existiert hauptsächlich für den Fall, dass Sie "merge files" verwenden (was merge files sind und wie sie die Arbeit geht über den Rahmen dieser Antwort hinaus). Da diese Dateien Regeln für Dateien enthalten können, die während des Löschens ausgeschlossen werden sollen, müssen neue Zusammenführungsdateien vor der Löschphase kopiert werden, wenn ihr Inhalt während der Löschphase berücksichtigt wird. Sofern dies nicht erforderlich ist, hat --delete-after keinen Vorteil.

--delete-delay ist eine ziemlich neue Option (sie ist in rsync 2.6.9 nicht verfügbar, was beispielsweise in macOS 10.15 immer noch der Standard ist). Es funktioniert wie --delete-during, außer dass es Dateien nicht sofort löscht, aber nachdem die Synchronisation abgeschlossen ist, ist es eine Mischung aus --delete-during und --delete-after. Die Vorteile sind, dass es schneller als --delete-after ist und immer noch Dateien korrekt zusammenführen unterstützt, der Nachteil ist, dass es mehr Speicher und Speicherplatz während der Synchronisation benötigt, genau wie --delete-after.

--delete-excluded weist rsync an, nicht nur Dateien zu löschen, die an der Quelle fehlen, sondern auch Dateien am Ziel zu löschen, die von der Synchronisierung ausgeschlossen wurden (--exclude oder --exclude-from), unabhängig davon, ob diese Dateien dies tun würden tatsächlich existieren an der Quelle oder nicht.

 11
Author: Mecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-13 13:39:22

Es sind zwei Dinge im Gange:

  1. Wer macht das löschen
  2. Wenn es passiert,

Entweder der Sender oder der Empfänger kann angewiesen werden, das Löschen durchzuführen (ich bin mir nicht sicher, warum dies wichtig ist). Wenn rsync von einem Computer aus eine Verbindung zum rsync-Server auf der anderen Seite herstellt, wird bestimmt, wer den Löschbefehl effektiv ausgibt.

Wenn es passiert, ist es ziemlich einfach... dies bedeutet, dass alle Dateien gelöscht werden und rsync DANN die Dateien kopiert. während bedeutet, wie es durch die Liste der Dateien geht, löscht es sie, wenn es um sie geht, und nach bedeutet, es wartet, bis alle Dateien übertragen werden über und löscht dann die Remote-Seite. Dies ist nur wichtig, wenn die Übertragung unterbrochen wird.

 2
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-06-25 12:57:07

Ein weiterer erwähnenswerter Punkt ist, dass rsync, wenn Ihr Quellverzeichnis mit /* endet, nur diese - Dateien und nicht das Verzeichnis selbst berücksichtigt (und somit das Fehlen von Dateien, die Sie löschen möchten) auf dem Ziel).

Wenn Sie oben eine Löschoption angeben, rsync jedoch so aussieht, als würde es nicht gelöscht, überprüfen Sie, ob Sie nicht versehentlich eine Liste von Dateien erstellen und bereitstellen, wenn Sie das Verzeichnis selbst meinen.

 2
Author: Walt Stoneburner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-01-17 18:50:20