Per default rsync
non cancella alcun file dalla parte della destinazione. Per fare in modo che rsync
cancelli i file, devi usare almeno una delle opzioni di cancellazione.
Se non ti interessa quando i file vengono cancellati, usa semplicemente --delete
e lascia la scelta a rsync
. Puoi combinare --delete
con altre opzioni di cancellazione (non c'è conflitto), ma non devi farlo perché tutte le altre opzioni di cancellazione implicano già --delete
.
--delete-before
funziona come segue: rsync
guarda quali file sono presenti nella sorgente e quali nella destinazione, cancella tutti i file trovati nella destinazione ma non nella sorgente e poi inizia la sincronizzazione vera e propria. Questo ordine è utile se la destinazione ha poco spazio in quanto libererà più spazio su disco nella destinazione prima di iniziare il trasferimento di qualsiasi nuovo file. L'aspetto negativo è che rsync
richiederà più memoria per eseguire l'operazione e l'intera operazione è un processo a due fasi e quindi più lento.
--delete-during
funziona come segue: rsync
inizia immediatamente a sincronizzare i file e quando incontra un file che esiste solo nella destinazione, viene cancellato. In questo modo non c'è nessuna penalità di velocità e non è nemmeno richiesta memoria aggiuntiva. L'aspetto negativo è che può succedere che prima vengano copiati molti nuovi file nelle destinazioni prima che i file rimossi vengano cancellati, quindi la destinazione può richiedere molto più spazio di memoria sul disco durante l'operazione di quanto ne richieda alla fine, una volta che l'intera operazione è stata fatta.
--delete-after
funziona come segue: Prima sincronizza tutti i file, poi esegue la stessa operazione che --delete-before
esegue prima della fase di sincronizzazione. Questa è la scelta peggiore nella maggior parte dei casi comuni poiché richiede più memoria, più spazio su disco nella destinazione, ed è più lenta poiché è un processo a due fasi; fondamentalmente combina tutti gli svantaggi degli altri due metodi. Questa opzione esiste principalmente per il caso in cui si stiano usando “merge files” (cosa siano i merge files e come funzionino va oltre lo scopo di questa risposta). Poiché questi file possono contenere regole per i file da escludere durante la cancellazione, i nuovi file di unione devono essere copiati prima della fase di cancellazione se il loro contenuto deve essere considerato durante la fase di cancellazione. A meno che questo sia un requisito, --delete-after
non ha alcun vantaggio.
--delete-delay
è un'opzione piuttosto nuova (non è disponibile in rsync
2.6.9, che è ancora il default in macOS 10.15 per esempio). Funziona come --delete-during
, tranne che non cancella i file immediatamente ma dopo che la sincronizzazione è stata fatta, quindi è un ibrido di --delete-during
e --delete-after
. Il vantaggio è che è più veloce di --delete-after
, lo svantaggio è che richiede più memoria durante la sincronizzazione.
--delete-excluded
dice a rsync
di non cancellare solo i file che mancano all'origine ma di cancellare anche i file nella destinazione che sono stati esclusi dalla sincronizzazione (--exclude
o --exclude-from
), indipendentemente dal fatto che questi file esistano o meno all'origine.