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

118

Ich sehe auf der rsync-Manpage, dass es eine Reihe von deleteOptionen 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
Skilldrick
quelle
2
Warum --delete-beforewird als beschrieben (default)? Ich kann nicht verstehen, was das (default)bedeutet.
Marco Marsala
1
Es ist nicht mehr als Standard auf der manSeite für angegeben rsync version 3.1.2 protocol version 31. Aber meine Vermutung auf der Version mit dem zitierten Text ist , dass , wenn Sie nur verwenden , --deleteanstatt --delete-WHEN, dann ist es , als ob Sie angegeben , --delete-WHENwo WHENstandardmäßig before.
Tom Hale

Antworten:

114
  • --del/--delete_during: Dateien aus dem Zielverzeichnis Löscht wie sie kopiert werden (Speicher spart im Vergleich zu --delete-before: --delete-beforemacht einen separaten Scan für deleteables zu suchen)

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

  • --delete-before: Löschen Sie die Dateien im Zielverzeichnis, bevor Sie die gleichnamige Datei aus dem Quellverzeichnis kopieren

  • --delete-during: Löschen Sie Dateien im Zielverzeichnis, WÄHREND Sie gleichnamige Dateien aus dem Quellverzeichnis kopieren

  • --delete-delay: Markieren Sie Löschvorgänge während der Übertragung, warten Sie jedoch, bis die Übertragung abgeschlossen ist

  • --delete-after: Empfänger wird nach der Übertragung gelöscht , nicht vor ... Wenn ein anderer Teil von rsync zusätzliche Dateien an einen anderen Ort verschoben hat, möchten Sie dies stattdessen --delete-delay, da --delete-delayentschieden wird, was während der Übertragung gelöscht wird, während --delete-afterdas Verzeichnis auf Dateien überprüft wird das sollte gelöscht werden, nachdem alles fertig ist.

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

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

--deleteInsbesondere die Flagge ist eine, die ich schon oft vermasselt gesehen habe. Viele Benutzer verwenden rsync, um Dateien in den Speicher mit niedriger Priorität zu verschieben. In diesem Fall möchten Sie, dass die zu verschiebenden Dateien weiterhin im Zielverzeichnis EXISTIEREN. Dies ist nicht die Aufgabe von delete: --deleteWenn Sie eine Datei aus dem Quellverzeichnis löschen, wird diese AUCH aus Ihrem Zielverzeichnis gelöscht, damit Ihr Ziel nicht mit Junk-E-Mails voll wird indem Sie ein neues Laufwerk einlegen und sein nächtliches Rsync-Skript nicht ausschalten. Das Skript hat festgestellt, dass das Quellverzeichnis jetzt leer ist und alle Dateien im Zielverzeichnis gelöscht wurden, damit sie übereinstimmen.

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

Satanicpuppy
quelle
3
Ist also --delete und --delete-before dasselbe? man rsync sagt nicht, wann --delete Dateien löscht.
3.
@ppr: Abhängig vom System. Der Grund, warum es so viele spezifische Optionen gibt, ist, dass delete unter Solaris! = Delete unter HP-UX! = Delete unter AIX! = Delete unter Linux.
Satanicpuppy
Wird beim Synchronisieren eines gesamten Verzeichnisses delete-afterjede Datei zwischen den Synchronisierungen gelöscht oder erst, nachdem das gesamte Verzeichnis gespiegelt wurde? Ich dachte, dass delete-afteres für meine Bedürfnisse ausreicht, aber ich bekomme keinen Platz mehr auf dem Gerät, wenn ich ein Backup von einem meiner Laufwerke mache.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat: Entweder. Es bewegt alles, was es bewegen wird, und wenn es fertig ist, beginnt es, Dinge zu löschen. Wenn Sie möchten, dass alles gelöscht wird, bevor es verschoben wird, verwenden Sie --delete-during
Satanicpuppy
2
Nach einiger Erfahrung stelle ich fest, dass delete-duringdies nicht immer verhindert wird no space left on device(unter Linux). Dies delete-beforeist die einzige garantierte Möglichkeit, dies zu vermeiden (z. B. wenn ein fast volles Laufwerk gespiegelt wird und das Ziellaufwerk fast voll ist).
Sridhar Sarnobat
1

Es gibt zwei Dinge, die vor sich gehen:

  1. Wer löscht das?
  2. Wenn es passiert

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

Wenn es passiert, ist es ziemlich einfach ... vorher bedeutet, dass alle Dateien gelöscht werden und DANN rsync über die Dateien kopiert. Während des Durchlaufens der Dateiliste werden diese gelöscht, und nach dem Durchlauf wird gewartet, bis alle Dateien übertragen wurden. Anschließend wird die entfernte Seite gelöscht. Dies ist nur dann von Bedeutung, wenn die Übertragung unterbrochen wird.

Michael Pryor
quelle
Ich bin mir ziemlich sicher, dass keine dieser Optionen mit dem Löschen von Dingen auf der Seite des Absenders zusammenhängt . Alle von ihnen (AFAIK) beziehen sich auf das Löschen von Dingen von der Empfängerseite . Außerdem sagen Sie: "Vorher bedeutet, dass alle Dateien gelöscht werden und DANN rsync über die Dateien kopiert" - stimmt das? Ich würde erwarten --delete-before, nur die Dateien zu löschen, die weg sein mussten, nicht alle Dateien! Aber ich denke, es ist möglich, dass rsync alles löscht und dann die "neuen" (möglicherweise unveränderten) Daten
überträgt
1
Ah, "vom Absender löschen" wird von rsync unterstützt, aber der Name dieser Option lautet --remove-source-files.
Quuxplusone
1

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

Wenn Sie oben eine Löschoption angeben, rsync jedoch nicht gelöscht werden soll, stellen Sie sicher, dass Sie nicht versehentlich eine Globe erstellen und eine Liste der Dateien bereitstellen, wenn Sie das Verzeichnis selbst meinen.

Walt Steinbrenner
quelle