Par défaut rsync
ne supprime aucun fichier du côté de la destination. Pour que rsync
supprime des fichiers, vous devez utiliser au moins une des options de suppression.
Si vous ne vous souciez pas du moment où les fichiers sont supprimés, utilisez simplement --delete
et laissez le choix à rsync
. Vous pouvez combiner --delete
avec d'autres options de suppression (cela n'entre pas en conflit) mais vous n'êtes pas obligé de le faire car toutes les autres options de suppression impliquent déjà --delete
.
--delete-before
fonctionne comme suit : rsync
regarde quels fichiers sont présents à la source et quels fichiers sont présents à la destination, supprime tous les fichiers trouvés à la destination mais pas à la source, puis lance la synchronisation proprement dite. Cet ordre est utile si la destination a peu d'espace de stockage car il libère d'abord plus d'espace disque à la destination avant de commencer à transférer de nouveaux fichiers. L'inconvénient est que rsync
nécessitera plus de mémoire pour effectuer l'opération et que toute l'opération se fait en deux étapes et est donc plus lente.
--delete-during
fonctionne comme suit : rsync
commence immédiatement à synchroniser les fichiers et lorsqu'il tombe sur un fichier qui n'existe qu'à la destination, il est supprimé. De cette façon, il n'y a pas de pénalité de vitesse et aucune mémoire supplémentaire n'est nécessaire. L'inconvénient est qu'il peut arriver qu'un grand nombre de nouveaux fichiers soient d'abord copiés vers les destinations avant que les fichiers supprimés ne soient effacés, de sorte que la destination peut nécessiter beaucoup plus d'espace de stockage sur le disque pendant l'opération qu'elle n'en a besoin à la fin, une fois l'opération terminée.
--delete-after
fonctionne comme suit : Synchroniser d'abord tous les fichiers, puis effectuer la même opération que --delete-before
avant la phase de synchronisation. C'est le pire choix dans la plupart des cas car il nécessite le plus de mémoire, le plus d'espace disque à la destination, et il est plus lent car il s'agit d'un processus en deux étapes ; en gros, il combine tous les inconvénients des deux autres méthodes. Cette option existe principalement dans le cas où vous utilisez des “fichiers de fusion” (ce que sont les fichiers de fusion et comment ils fonctionnent dépasse le cadre de cette réponse). Comme ces fichiers peuvent contenir des règles d'exclusion de fichiers lors de la suppression, les nouveaux fichiers de fusion doivent être copiés avant la phase de suppression si leur contenu doit être pris en compte pendant la phase de suppression. À moins que cela ne soit une exigence, --delete-after
n'a aucun avantage.
--delete-delay
est une option plutôt nouvelle (elle n'est pas disponible dans rsync
2.6.9, qui est toujours la valeur par défaut dans macOS 10.15 par exemple). Elle fonctionne comme --delete-during
, sauf qu'elle ne supprime pas les fichiers immédiatement mais après la synchronisation, c'est donc un hybride de --delete-during
et --delete-after
. L'avantage est qu'il est plus rapide que --delete-after
, l'inconvénient est qu'il nécessite plus de mémoire pendant la synchronisation.
--delete-excluded
indique à rsync
de ne pas seulement supprimer les fichiers manquants à la source mais aussi de supprimer les fichiers à la destination qui ont été exclus de la synchronisation (--exclude
ou --exclude-from
), que ces fichiers existent ou non à la source.