Ich habe diese Threads gelesen:
- rsync --delete --files-from = list / dest / löscht keine unerwünschten Dateien
- Fremddateien aus Zielverzeichnis über rsync löschen?
Aber soweit ich das beurteilen kann (vielleicht fehlt mir etwas), decken sie nicht die folgende Frage ab:
Wie können Sie rsync
Dateien kopieren und diejenigen auf der empfangenden Seite löschen, die auf der sendenden Seite mit Ausnahmen nicht vorhanden sind? (Entfernen Sie z. B. kein Quecksilber-Repository .hg
auf der Empfängerseite, auch wenn auf der Senderseite kein Repository vorhanden ist.)
Eine Möglichkeit?
Entlehnt von der Antwort von @Richard Holloway unten. Angenommen, ich habe die folgende Zeile:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Soweit ich rsync
weiß , würde in dieser Zeile alles auf dem Empfangspfad gelöscht, was auf dem Sendepfad nicht vorhanden ist, mit Ausnahme derjenigen, die mit übereinstimmen dont_delete_me
. Meine Frage ist jetzt: Würde rsync Dateien auf der empfangenden Seite behalten, die mit übereinstimmen, dont_delete_me
selbst wenn nichts auf der sendenden Seite übereinstimmt dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Würde das nicht dazu führen, dassrsync
alles auf dem Empfangspfad gelöscht wird, was auf dem Sendepfad nicht vorhanden ist, mit Ausnahme von Dingen, die mit übereinstimmendont_delete_me
? Wäre es am wichtigsten,rsync
die Dinge auf der empfangenden Seite auf dem gleichen Stand zu halten,dont_delete_me
selbst wenn nichts auf der sendenden Seite übereinstimmtdont_delete_me
? Wenn das der Fall ist, denke ich, ist das die einzige Leitung, die ich brauche, oder?--delete
, es sei denn, Sie geben dies ausdrücklich an--delete-excluded
. Siehe die Beschreibung von--delete
und--delete-excluded
im rsync-Handbuch.Ich fand, dass die folgende Lösung für meine Zwecke funktioniert:
(Hinweis: Fügen Sie die
-n
Option zum Trockenlauf hinzu und ändern Sie sie nicht--delete
in--delete-excluded
!)Das Ausführen des Befehls führt zu folgenden Eigenschaften:
src
bleibt unverändertDer
dest
Zielordner stimmt mit dem Quellordner überein, außer dass:do_not_send_to_dest
Liste werden nicht an das Ziel gesendetdo_not_modify_in_dest
Liste bleiben im Ziel unverändert.do_not_
" Dateien aufgelistet werden.)Erläuterung
Ich vermute, während rsync die Befehlszeilenargumente von links nach rechts liest,
--delete
scheint das Argument dazu zu führen, dass rsync intern den Modus wechselt (in gewissem Sinne), wodurch die zweite Verwendung der--exclude-from
Option wieder möglich wird, jedoch mit einer anderen Bedeutung.Vorbehalt:
Wenn ein Element in der
do_not_send_to_dest
Liste bereits im Ziel vorhanden ist, gilt Folgendes:--delete
auf ändern ,--delete-excluded
werden alle Einträge im Ziel gelöscht, die in einer Ihrer beiden Listen aufgeführt sind. xD (Vielleicht wurde rsync so geschrieben, dass es offen / flexibel ist, aber einige mit Nuancen?)Leicht gebrauchsgeprüft.
Ich benutze "
rsync version 3.0.9 protocol version 30
".quelle