5 votes

Supprimer les fichiers dupliqués avec rsync

Voilà ce qu'il en est ,

J'ai un dossier sur mon serveur d'une taille de 50 Go et contenant plus de 60000 fichiers. J'ai utilisé rsync pour le transférer vers un serveur miroir et presque la moitié du fichier a été transféré. maintenant je veux supprimer le fichier transféré sur le serveur principal.

Cela peut-il être fait avec rsync ? J'ai lu l'aide et j'ai trouvé l'option --delete mais ces fichiers sont si importants que je veux avoir l'avis d'un expert, merci.

6voto

Florian Feldhaus Points 238

Rsync (vérifié avec la version 3.0.9) possède une option appelée --remove-source-files qui fait ce qu'il dit. Si vous voulez seulement supprimer les fichiers transférés et ne pas transférer les fichiers supplémentaires qui n'ont pas encore été transférés, vous devez utiliser en plus l'option `--existing``.

Malheureusement, il semble que rsync n'affiche pas les fichiers qu'il supprime, même si les options --verbose --itemize-changes --stats sont utilisés.

Exemple

# create source and target dirs
mkdir /tmp/source
mkdir /tmp/target
# create a test file in source
touch /tmp/source/test
# rsync source and target
rsync --archive --itemize-changes --verbose --stats /tmp/source/ /tmp/target
# verify that test has been copied to target
[ -f /tmp/target/test ] && echo "Found" || echo "Not found"
# create another file in source
touch /tmp/source/test2
# delete files on source which are already existing on target
rsync --archive --itemize-changes --verbose --stats --remove-source-files --existing /tmp/source/ /tmp/target
# verify that test has been deleted on source
[ -f /tmp/source/test ] && echo "Found" || echo "Not found"
# verify that test2 still exists on source and was not transferred to target
[ -f /tmp/source/test2 ] && echo "Found" || echo "Not found"
[ -f /tmp/target/test2 ] && echo "Found" || echo "Not found"

1voto

JvO Points 893

Comme écrit précédemment, rsync ne supprimera pas à partir de la source, seulement sur la destination.

Dans votre cas, je générerais des hachages MD5 des fichiers sur le serveur miroir, puis vérifierais sur le serveur primaire si les hachages sont corrects et supprimerais ces fichiers.

C'est-à-dire :

mirror$ find . -type f -print0 | xargs -0 md5sum > mirror.md5

..transférer le miroir.md5 au serveur primaire...

primary$ md5sum -c mirror.md5

Vérifiez si des fichiers ont échoué, puis supprimez les fichiers qui ont été transférés avec succès. Vous pourriez l'automatiser comme ceci :

md5sum -c mirror.md5 | grep 'OK$' | sed -e 's/: OK$//' | while read FILE; do rm "$FILE"; done

Cela filtrera tous les fichiers avec un bon hachage, coupera la partie 'OK' du md5sum et supprimera les fichiers un par un.

Inutile de dire qu'après ça, vous Ne le fais pas. vous voulez utiliser l'option --delete de rsync pour transférer la seconde moitié de vos fichiers...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X