Quelles sont les différences entre les options de suppression rsync?

120

Je vois sur la page de manuel de rsync qu'il y a plusieurs deleteoptions, 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
Skilldrick
la source
2
Pourquoi --delete-beforeest décrit comme (default)? Je ne peux pas comprendre ce que (default)signifie.
Marco Marsala
1
Ce n'est plus spécifié par défaut dans la manpage pour rsync version 3.1.2 protocol version 31. Cependant, je pense sur la version avec le texte cité est que si vous utilisez uniquement --deleteplutôt que --delete-WHEN, alors il est comme si vous avez spécifié --delete-WHENoù la WHENvaleur par défaut before.
Tom Hale

Réponses:

115
  • --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-beforeeffectue 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-delaydécide ce qu'elle va supprimer au milieu du transfert, alors qu'elle --delete-afterrecherche 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 --deletedrapeau 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: --deleteveille à 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.

Satanicpuppy
la source
3
Alors, est-ce que --delete et --elelete-before? man rsync ne dit pas quand --delete supprime les fichiers.
ppr
@ppr: dépend du système. La raison pour laquelle il comporte tant d'options spécifiques est la suppression sous Solaris! = Suppression sous HP-UX! = Suppression sous AIX! = Suppression sous Linux.
Satanicpuppy
Lors de la synchronisation d'un répertoire entier, delete-aftersupprime-t-il chaque fichier entre les synchronisations ou uniquement après que le répertoire entier a été mis en miroir? Je pensais que delete-afterc'é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.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat: Soit. Il déplace tout ce qui va bouger et quand c'est terminé, il commence à supprimer des choses. Si vous voulez qu'il supprime avant de tout déplacer, utilisez --delete-
During
2
Après quelques expériences, je constate que cela delete-duringn’empêche même pas toujours no space left on device(sous Linux). C’est donc delete-beforele seul moyen garanti de l’éviter (comme lors de la copie miroir d’un lecteur presque plein et du lecteur de destination également saturé).
Sridhar Sarnobat
1

Il y a deux choses qui se passent:

  1. Qui fait la suppression
  2. Quand ça arrive

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.

Michael Pryor
la source
Je suis à peu près sûr qu'aucune de ces options ne concerne la suppression d'éléments du côté de l' expéditeur . Tous (AFAIK) concernent la suppression d'éléments du côté du récepteur . En outre, vous dites: "avant signifie que tous les fichiers sont supprimés, puis rsync copie par-dessus les fichiers" - est-ce exact? Je m'attendrais --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) ...
Quuxplusone
1
Ah, "supprimer du côté de l'expéditeur" est supporté par rsync, mais le nom de cette option est --remove-source-files.
Quuxplusone
1

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.

Walt Stoneburner
la source