rsync --delete nie działa
System operacyjny to Debian 10, rsync w wersji 3.1.3. Uruchamiam rsync w ten sposób:
time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
Działa to w celu skopiowania plików, ale nie usuwa niczego, co zostało usunięte. (Albo całkowicie usunięte z src, albo w moim przypadku usunięte z filelist.txt) To jest ogromny problem. Jedynym rozwiązaniem, jakie znalazłem, jest po prostu nuke całego miejsca docelowego i po prostu skopiowanie wszystkiego od nowa, ale zajmuje to ogromną ilość czasu i zasadniczo neguje sens używania rsync w pierwszej kolejności.
Czy to błąd? Jak sprawić, by rsync działał poprawnie, honorując flagę --delete, tak jak powinna?
Edytować:
Na przykład:
- Jeśli filelist.txt zawiera „foo”, wtedy / path / to / dest będzie zawierało „foo”.
- Jeśli filelist.txt zawiera „foo” i „bar”, to / path / to / dest będzie zawierało „foo” i „bar”.
- Jeśli filelist.txt zawiera „foo”, „bar” i „bat”, wówczas / path / to / dest będzie zawierało „foo”, „bar” i „bat”.
- itp
Załóżmy, że „foo”, „bar”, „bat” itp. To katalogi.
Odpowiedzi
Musisz powiedzieć rsync, aby usunął brakujące argumenty:
rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
- Więc jeśli usuniesz katalog
foo, zostanie on również usunięty za/path/to/destpomocą--delete-missing-args. foonadal musi być wymieniony wfilelist.txt.--deleteargumentem jest wymagane, aby umożliwić rsync, aby usunąć pliki zfoofolderu
Nie. rsyncNie usunie plików / katalogów tylko dlatego, że lista plików nie zawiera tych plików lub jest pusta.
jeśli używasz --files-from, spróbuje zsynchronizować tylko wymienione pliki ze źródła do miejsca docelowego.
Nie usunie plików tylko dlatego, że nie ma ich na liście plików przekazanych do --files-from.
Aby --delete działało, musisz użyć rzeczywistej ścieżki źródłowej… w ten sposób
rsync -ar --delete path/to/src path/to/destination