rsync --delete funktioniert nicht

Sep 15 2020

Betriebssystem ist Debian 10, rsync Version 3.1.3. Ich führe rsync so aus:

time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest

Dies funktioniert, um die Dateien zu kopieren, löscht jedoch nichts, was entfernt wurde. (Entweder vollständig aus src entfernt oder in meinem Fall aus filelist.txt entfernt) Das ist ein großes Problem. Die einzige Problemumgehung, die ich gefunden habe, besteht darin, einfach das gesamte Ziel zu zerstören und alles erneut zu kopieren. Dies nimmt jedoch sehr viel Zeit in Anspruch und negiert im Grunde den Sinn der Verwendung von rsync.

Ist das ein Fehler? Wie bringe ich rsync dazu, richtig zu funktionieren und das Flag --delete so zu ehren, wie es soll?

Bearbeiten:

Zum Beispiel:

  • Wenn filelist.txt "foo" enthält, enthält / path / to / dest "foo".
  • Wenn filelist.txt "foo" und "bar" enthält, enthält / path / to / dest "foo" und "bar".
  • Wenn filelist.txt "foo", "bar" und "bat" enthält, enthält / path / to / dest "foo", "bar" und "bat".
  • usw

Angenommen, "foo", "bar", "bat" usw. sind Verzeichnisse.

Antworten

3 laktak Sep 24 2020 at 14:24

Sie müssen rsync anweisen, die fehlenden Argumente zu löschen:

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • Also , wenn Sie das Verzeichnis löschen fooes wird dann auch in gelöscht werden /path/to/destmit --delete-missing-args.
  • foomuss noch in aufgeführt werden filelist.txt.
  • Das --deleteArgument ist erforderlich, damit rsync die Dateien im fooOrdner löschen kann
SandeepKothari Sep 28 2020 at 15:16

Nein rsync, löscht keine Dateien / Verzeichnisse, nur weil die Dateiliste diese Dateien nicht enthält oder leer ist.

Wenn Sie es verwenden --files-from, wird versucht, nur die von der Quelle zum Ziel aufgelisteten Dateien zu synchronisieren.

Die Dateien werden nicht gelöscht, nur weil sie in der übergebenen Dateiliste nicht vorhanden sind --files-from.

Damit --delete funktioniert, müssen Sie den tatsächlichen Quellpfad verwenden

rsync -ar --delete path/to/src path/to/destination