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
--delete-before
wird als beschrieben(default)
? Ich kann nicht verstehen, was das(default)
bedeutet.man
Seite für angegebenrsync version 3.1.2 protocol version 31
. Aber meine Vermutung auf der Version mit dem zitierten Text ist , dass , wenn Sie nur verwenden ,--delete
anstatt--delete-WHEN
, dann ist es , als ob Sie angegeben ,--delete-WHEN
woWHEN
standardmäßigbefore
.Antworten:
--del/--delete_during
: Dateien aus dem Zielverzeichnis Löscht wie sie kopiert werden (Speicher spart im Vergleich zu--delete-before
:--delete-before
macht 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-delay
entschieden wird, was während der Übertragung gelöscht wird, während--delete-after
das 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.
--delete
Insbesondere 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:--delete
Wenn 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.
quelle
delete-after
jede Datei zwischen den Synchronisierungen gelöscht oder erst, nachdem das gesamte Verzeichnis gespiegelt wurde? Ich dachte, dassdelete-after
es 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.delete-during
dies nicht immer verhindert wirdno space left on device
(unter Linux). Diesdelete-before
ist die einzige garantierte Möglichkeit, dies zu vermeiden (z. B. wenn ein fast volles Laufwerk gespiegelt wird und das Ziellaufwerk fast voll ist).Es gibt zwei Dinge, die vor sich gehen:
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.
quelle
--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--remove-source-files
.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.
quelle