rsync --delete funktioniert nicht
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
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 werdenfilelist.txt.- Das
--deleteArgument ist erforderlich, damit rsync die Dateien imfooOrdner löschen kann
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