Domyślnie rsync
nie usuwa żadnych plików po stronie docelowej. Aby rsync
mógł w ogóle usuwać pliki, musisz użyć przynajmniej jednej z opcji usuwania.
Jeśli nie obchodzi cię, kiedy pliki są usuwane, po prostu użyj --delete
i pozostaw wybór rsync
. Możesz połączyć --delete
z innymi opcjami kasowania (nie powoduje to konfliktu), ale nie musisz, ponieważ wszystkie inne opcje kasowania już implikują --delete
.
--delete-before
działa w następujący sposób: rsync
patrzy, które pliki są obecne w źródle i które pliki są obecne w miejscu docelowym, usuwa wszystkie pliki znalezione w miejscu docelowym, ale nie w źródle, a następnie rozpoczyna właściwą synchronizację. Ta kolejność jest przydatna, jeśli miejsce docelowe ma mało miejsca, ponieważ najpierw zwolni więcej miejsca na dysku w miejscu docelowym przed rozpoczęciem przesyłania nowych plików. Minusem jest to, że rsync
będzie wymagał więcej pamięci do wykonania operacji i cała operacja jest procesem dwuetapowym, a więc wolniejszym.
--delete-during
działa w następujący sposób: rsync
natychmiast zaczyna synchronizować pliki i gdy natrafi na plik, który istnieje tylko w miejscu docelowym, jest on usuwany. W ten sposób nie ma kary za prędkość, a także nie jest wymagana dodatkowa pamięć. Minusem jest to, że może się zdarzyć, że najpierw wiele nowych plików jest kopiowanych do miejsc docelowych, zanim usunięte pliki zostaną usunięte, więc miejsce docelowe może wymagać znacznie więcej miejsca na dysku podczas operacji, niż wymaga na końcu, gdy cała operacja jest zakończona.
--delete-after
działa w następujący sposób: Najpierw zsynchronizuj wszystkie pliki, a następnie wykonaj tę samą operację, którą --delete-before
wykonuje przed fazą synchronizacji. Jest to najgorszy wybór w większości przypadków, ponieważ wymaga najwięcej pamięci, najwięcej miejsca na dysku w miejscu docelowym i jest wolniejszy, ponieważ jest to proces dwuetapowy; w zasadzie łączy w sobie wszystkie wady pozostałych dwóch metod. Ta opcja istnieje głównie dla przypadku, gdy używasz “merge files” (czym są pliki scalające i jak działają, jest poza zakresem tej odpowiedzi). Ponieważ te pliki mogą zawierać reguły dla plików, które mają być wykluczone podczas usuwania, nowe pliki scalania muszą być skopiowane przed fazą usuwania, jeśli ich zawartość ma być brana pod uwagę podczas fazy usuwania. O ile nie jest to wymóg, --delete-after
nie ma żadnej przewagi.
--delete-delay
jest dość nową opcją (nie jest dostępna w rsync
2.6.9, która nadal jest domyślna np. w macOS 10.15). Działa podobnie jak --delete-during
, z tą różnicą, że nie będzie usuwać plików od razu, ale po wykonaniu synchronizacji, jest więc hybrydą --delete-during
i --delete-after
. Zaletą jest to, że jest szybszy niż --delete-after
, wadą jest to, że wymaga więcej pamięci podczas synchronizacji.
--delete-excluded
mówi rsync
, aby nie tylko usuwał pliki, których brakuje w źródle, ale także usuwał pliki w miejscu docelowym, które zostały wykluczone z synchronizacji (--exclude
lub --exclude-from
), niezależnie od tego, czy te pliki faktycznie istniałyby w źródle, czy nie.