Je vois sur la page de manuel de rsync qu'il y a plusieurs delete
options, mais je ne comprends pas vraiment les différences entre elles. 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
--delete-before
est décrit comme(default)
? Je ne peux pas comprendre ce que(default)
signifie.man
page pourrsync version 3.1.2 protocol version 31
. Cependant, je pense sur la version avec le texte cité est que si vous utilisez uniquement--delete
plutôt que--delete-WHEN
, alors il est comme si vous avez spécifié--delete-WHEN
où laWHEN
valeur par défautbefore
.Réponses:
--del/--delete_during
: Supprime les fichiers du répertoire de destination au fur et à mesure qu'ils sont copiés (enregistre 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
: Supprimer des fichiers du répertoire de destination avant de copier le fichier avec le même nom à partir du répertoire source--delete-during
: Supprimer des 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 attend que le transfert soit terminé--delete-after
: Receiver supprime après le transfert, pas avant ... Si une autre partie de rsync a déplacé des fichiers supplémentaires ailleurs, vous préféreriez utiliser cette option au lieu de--delete-delay
, car elle--delete-delay
décide ce qu'elle va supprimer au milieu du transfert, alors qu'elle--delete-after
recherche les fichiers dans le répertoire. cela devrait être supprimé APRÈS que tout soit fini.--delete-excluded
: Supprime les fichiers du répertoire de destination qui sont 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
--delete
drapeau 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 supprime:--delete
veille à ce que, lorsque vous supprimez un fichier du répertoire source, il soit AUSSI supprimé de votre répertoire de destination, de sorte que votre destination ne soit pas pleine de courrier indésirable ... Une fois vu un mec effacer sa sauvegarde en mettant dans un nouveau lecteur, et ne pas éteindre 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 les 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.
la source
delete-after
supprime-t-il chaque fichier entre les synchronisations ou uniquement après que le répertoire entier a été mis en miroir? Je pensais quedelete-after
c'était suffisant pour mes besoins, mais je n'ai plus d'espace sur le périphérique lorsque je sauvegarde l'un de mes disques.delete-during
n’empêche même pas toujoursno space left on device
(sous Linux). C’est doncdelete-before
le seul moyen garanti de l’éviter (comme lors de la copie miroir d’un lecteur presque plein et du lecteur de destination également saturé).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 jusqu’à ce que tous les fichiers soient transférés, puis supprime le côté distant. Cela importe uniquement lorsque le transfert est interrompu.
la source
--delete-before
à ne supprimer que les fichiers qui devaient disparaître, pas tous les fichiers! Mais je suppose qu'il est possible que rsync supprime tout, puis transfère les "nouvelles" données (éventuellement inchangées) ...--remove-source-files
.Un autre point à noter est que si votre répertoire source se termine par
/*
, rsync ne considérera que ces 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.
la source