Je vois sur la page de manuel rsync qu'il existe un certain nombre d'options delete
, mais je ne comprends pas vraiment les différences qui les séparent. Quelles sont les différences entre ces options?
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during xfer, not before
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from dest dirs
--del/--delete_during
: supprime les fichiers du répertoire de destination au fur et à mesure qu'ils sont copiés (sauvegarde de la mémoire par rapport à --delete-before
: --delete-before
effectue une analyse distincte pour rechercher les éléments supprimables)
--delete
: Supprime les fichiers du répertoire de destination s'ils n'existent pas dans le répertoire source.
--delete-before
: Supprimez les fichiers du répertoire de destination avant de copier le fichier avec le même nom à partir du répertoire source
--delete-during
: supprime les fichiers du répertoire de destination pendant la copie d'un fichier portant le même nom à partir du répertoire source
--delete-delay
: Mark supprime pendant le transfert, mais attendez que le transfert soit terminé
--delete-after
: le récepteur supprime après le transfert, pas avant ... Si une autre partie de rsync a déplacé des fichiers supplémentaires ailleurs, vous souhaitez utiliser ceci plutôt que --delete-delay
, car --delete-delay
décide ce qu'il va supprimer au milieu du transfert, alors que --delete-after
vérifie le répertoire des fichiers qui doivent être supprimés APRÈS que tout soit terminé.
--delete-excluded
: Supprime les fichiers du répertoire de destination explicitement exclus du transfert du répertoire source.
Le but de rsync n’est pas de copier, mais d’archiver. Cette distinction est importante. Le traitement des fichiers supprimés/modifiés est essentiel et, dans de nombreux cas, nuancé.
Le drapeau --delete
en particulier est celui que j'ai vu foiré à plusieurs reprises. De nombreuses personnes utilisent rsync pour déplacer des fichiers vers un stockage de priorité basse. Dans ce cas, vous souhaitez que les fichiers que vous déplacez EXISTENT toujours dans le répertoire de destination. Ce n'est pas ce que fait delete: --delete
s'assure que, lorsque vous supprimez un fichier du répertoire source, il est AUSSI supprimé du répertoire de votre destination, de sorte que votre destination ne soit pas pleine de courrier indésirable ... Un jour, un gars a effacé son sauvegarde en insérant un nouveau lecteur et en ne désactivant pas son script nocturne rsync. Le script a constaté que le répertoire source était maintenant vide et a supprimé tous les fichiers du répertoire de destination afin qu'ils correspondent.
La plupart des autres options sont liées à l'espace ou à la performance. Lorsque vous supprimez les fichiers est important si vous voulez vous assurer que le transfert est réussi avant de faire quoi que ce soit, mais si votre appareil est trop petit pour gérer 2 copies de toutes les informations, vous devez le supprimer au fur et à mesure, etc. little wacky en raison de sa longue histoire sur plusieurs plates-formes: des options ont été ajoutées pour que les personnes habituées à certains comportements ne soient pas déroutées.
Un autre point à noter est que si votre répertoire source se termine par /*
, alors rsync ne considérera que ceux-ci fichiers et non le répertoire lui-même (et donc l’absence de fichiers que vous souhaitez supprimer sur la destination).
Si vous spécifiez une option de suppression ci-dessus, mais que rsync semble ne pas être une suppression, vérifiez que vous n'êtes pas en train de globaliser et de fournir une liste de fichiers lorsque vous voulez parler du répertoire lui-même.
Il y a deux choses qui se passent:
On peut demander à l'expéditeur ou au destinataire d'effectuer la suppression (je ne suis pas sûr de savoir pourquoi cela est important). Ainsi, lorsque rsync d'un ordinateur se connecte au serveur rsync de l'autre côté, cela détermine qui est effectivement en train d'exécuter la commande de suppression.
Quand cela se produit, c’est assez facile ... avant signifie que tous les fichiers sont supprimés, puis rsync copie par-dessus les fichiers. pendant signifie qu’il parcourt la liste des fichiers, il les supprime quand il s’agit d’eux, et après signifie qu’il attend que tous les fichiers soient transférés, puis supprime le côté distant. Cela importe uniquement lorsque le transfert est interrompu.