Utiliser rsync pour déplacer (pas copier) des fichiers entre des répertoires?

55

J'utilise rsync pour copier des fichiers depuis un certain temps. D'après ce que je comprends, rsync est plus rapide que cp lorsque certains des fichiers à transférer se trouvent déjà dans le répertoire de destination, ne transférant que la différence incrémentale (c'est-à-dire les "deltas").

Si cela est correct, serait-il avantageux d'utiliser rsync pour déplacer le contenu d'un dossier A , par exemple d'un dossier B , où B est vide?

Le dossier A contient près de 1 To de données (et des millions de fichiers). Le transfert se ferait sur un réseau local ( A et B étant sur différents systèmes de fichiers, les deux montés sur un superordinateur, par exemple, A est NFS et B est en lustre ).

À part cela, quels indicateurs devrais-je utiliser pour demander à rsync de déplacer (et non de copier) les fichiers de A à B (c'est-à-dire de supprimer A lorsque le transfert est terminé)?

Amelio Vazquez-Reina
la source
7
Je ne pense pas rsyncpouvoir remplacer mv. Je m'attendrais mvà être plus rapide sur la plupart des types de système de fichiers lorsque la source et la destination se trouvent dans le même système de fichiers, car il rsyncfaudrait en faire une copie quoi qu'il en soit, et mvrisquerait probablement de modifier quelques entrées de répertoire. Ce que je trouve le plus proche de an rsync mvest la --remove-source-filescommande, mais cela ne supprime pas les répertoires.
jw013
2
Merci @ jw013! Juste pour clarifier, les fichiers sont sur différents systèmes de fichiers et le transfert se ferait sur un réseau . Savez-vous si cela ferait encore mvplus vite?
Amelio Vazquez-Reina
1
Eh bien, mvne peut pas fonctionner sur un réseau - il faudrait s’appuyer sur un montage local (par exemple, NFS). Si le goulot d'étranglement est le réseau, rsyncserait probablement plus rapide que mvparce que rsyncpeut faire la compression.
jw013
2
En passant cpa l' -uoption de copier le fichier source s'il est plus récent que le fichier de destination ou si le fichier de destination est manquant
rush le

Réponses:

69

Vous pouvez passer --remove-source-filesà rsync pour déplacer des fichiers au lieu de les copier.

Mais dans votre cas, l’utilisation de rsync est inutile, car la destination est vide. Une plaine mvfera le travail aussi vite que possible.

Dans votre cas, ce qui pourrait faire une différence en termes de performances est le choix du protocole réseau, si vous avez le choix entre NFS, Samba, sshfs, sftp, rsync sur ssh, tar transféré dans ssh, etc. La vitesse relative de ces méthodes dépend sur la taille des fichiers, la bande passante du réseau et du disque, et d’autres facteurs, il n’ya donc aucun moyen de donner des conseils généraux, vous devrez exécuter vos propres tests.

Gilles, arrête de faire le mal
la source
6
Juste pour répéter ce que dit Caleb, si vous êtes inquiet à propos de la corruption due, par exemple, à un réseau floconneux, rsync peut avoir un sens, car il vérifie chaque fichier qu’il écrit en tamponnant les blocs au fur et à mesure de leur rédaction.
Daniel S. Sterling
5
le --remove-source-filesseul supprime les fichiers de la source. si vous voulez effacer notre source, ne devriez-vous pas faire un rm -rf (ou findtous les répertoires et transmettre -delete) sur la source après que rsync s'exécute avec succès?
Trevor Boyd Smith
1
@ DanielS.Sterling rsync ne bloque pas les sommes de contrôle après les avoir écrites (il utilise des sommes de contrôle pour rechercher les parties des fichiers existants qui ont été mises à jour et doivent être synchronisées). Vous pouvez effectuer une deuxième synchronisation avec --checksumpour lui dire de vérifier les résultats de la première synchronisation.
Clément
19

Puisque --remove-source-filesne supprime pas les répertoires, j'émets les commandes suivantes pour déplacer des fichiers sur ssh:

rsync -avh --progress --remove-source-files /home/user/mystuff/* [email protected]:/home/user/backup
find . -type d -empty -delete

Personnellement, j'aime bien cette --progressfonctionnalité, car je fais ce transfert manuellement. Supprimez-le si vous utilisez un script. Je pense que cela ralentira légèrement les transferts. L' findoption delete de la commande ne supprime que les répertoires vides - ne l'utilisez pas rm -rfcar elle risquerait de supprimer des répertoires non vides au cas où un fichier ne serait pas transféré. L' -deleteoption active l' -depthoption de sorte que les arborescences de répertoires vides soient supprimées à partir du bas.

Kristian
la source
3
-deleteest beaucoup plus agréable que -exec rmdir {} +etc.
lkraav
1
Je sauterais l'astérisque parce que les barres obliques de fin / avec les chemins si vous le faites localement. Si vous utilisez asterisk, rsync ignorera les fichiers cachés tels que .htaccess ou .htpasswd (le cas échéant)
Svetoslav Marinov
16

En général, comme l'a dit Gilles, il n'y a aucun avantage à rsyncdéplacer des fichiers lorsque mvle même travail est effectué plus facilement et il n'y a pas de gain de vitesse potentiel entre les systèmes de fichiers ordinaires.

Il y a cependant des moments où il y a un avantage. En particulier, si vous avez des doutes sur la stabilité de la source, de la destination ou de la machine effectuant le travail, l’utiliser rsyncvous permet de reprendre. Cela peut constituer un avantage notable si votre transfert est très volumineux et que votre réseau électrique n'est pas fiable, par exemple. Utiliser rsync sera un moyen plus stable d’éviter la corruption des données en cas de défaillance et de reprendre là où vous vous êtes arrêté.

Caleb
la source
5
Je dirais que c'est un avantage énorme. En fait, je dirais qu'il mvvaut mieux que la cible et la source se trouvent dans la même partition, de sorte que mvseules les métadonnées du fichier sont éditées au lieu d'être copiées.
nommé
2
Une fois que j'ai besoin rsyncplutôt que de mv, c’est quand je veux conserver la structure des dossiers (si vous utilisez --relative).
Sridhar Sarnobat
15

Y aurait-il un avantage à utiliser rsync pour déplacer le contenu d'un dossier A, par exemple un dossier B, B étant vide?

Je me suis trouvé dans une situation où rsync est plus rapide que mv simplement parce que mv ne peut pas gérer le nombre de fichiers du répertoire. J'ai 1,8 million de photos d'une caméra de sécurité qui a fonctionné pendant 20 jours et la commande mv se ferme avec un échec car elle ne peut pas allouer de ressources.

Cependant, rsync semble traiter tous les fichiers sans problème.

shadowv
la source
1

Si vous souhaitez fusionner des répertoires de manière récursive ... déplacez un répertoire dans un autre répertoire avec des noms de répertoires potentiellement dupliqués , veuillez consulter ma réponse ici sur serverfault.com. mveffectue un travail médiocre lorsque des répertoires portant le même nom existent et rsynccopie (lit + écrit toutes les données) chaque fichier au lieu de les déplacer (lecture et écriture de métadonnées uniquement).

Peter
la source
0

Il n’existe aucun moyen de déplacer des fichiers à l’aide de rsync comme le ferait une commande Linux mv. En utilisant --remove-source-files, vous copiez essentiellement des fichiers vers la destination, puis supprimez des fichiers (sauf les répertoires) de la source. Cela peut vous permettre de déplacer des fichiers, mais vous ne gagnerez PAS de temps ni d'opération d'E / S.

Gehendra Acharya
la source