J'utilise rsync pour copier des fichiers depuis un certain temps. Ma compréhension est que rsync est plus rapide que cp lorsque certains fichiers à transférer sont 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, y aurait-il un avantage à utiliser rsync pour déplacer le contenu d'un dossier [~ # ~] a [~ # ~] , c'est-à-dire un dossier [~ # ~] b [~ # ~] , avec [~ # ~] b [~ # ~] étant 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 activé différent systèmes de fichiers, tous deux montés sur un supercalculateur, par exemple [~ # ~] a [~ # ~] est NFS et [~ # ~] b [ ~ # ~] est lustre ).
Mis à part cela, quels indicateurs dois-je utiliser pour demander rsync de déplacer (pas de copier) les fichiers de [~ # ~] a [~ # ~] à [~ # ~] b [~ # ~] (c'est-à-dire à supprimer [~ # ~] a [~ # ~] lorsque le transfert s'est terminé avec succès)?
Tu peux passer --remove-source-files
à rsync pour déplacer des fichiers au lieu de les copier.
Mais dans votre cas, il est inutile d'utiliser rsync, car la destination est vide. Un simple mv
fera le travail le plus rapidement possible.
Dans votre cas, ce qui pourrait faire une différence dans les performances, c'est le choix du protocole réseau, si vous avez le choix entre NFS, Samba, sshfs, sftp, rsync sur ssh, tar redirigé vers ssh, etc. La vitesse relative de ces méthodes dépend sur la taille des fichiers, le réseau et la bande passante du disque, et d'autres facteurs, il n'y a donc aucun moyen de donner des conseils généraux, vous devrez exécuter vos propres tests de performance.
Depuis --remove-source-files
ne supprime pas les répertoires, j'émets les commandes suivantes pour déplacer fichiers sur ssh:
rsync -avh --progress --remove-source-files /source/* user@server:/target \
&& find /source -type d -empty -delete
J'aime personnellement le --progress
fonction, car je fais ce transfert manuellement. Supprimez-le si vous utilisez un script. Je pense que cela ralentit légèrement les transferts. L'option de suppression de la commande find
supprime uniquement les répertoires vides - n'utilisez pas rm -rf
, car il peut supprimer des répertoires non vides au cas où un fichier n'aurait pas été transféré. Le -delete
l'option active le -depth
option pour que les arborescences de répertoires vides soient supprimées du "bas" vers le haut.
En général, comme Gilles a dit il n'y a aucun avantage à utiliser rsync
pour déplacer des fichiers lorsque mv
fera le même travail plus simplement et il n'y a pas de gain de vitesse potentiel entre l'ordinaire systèmes de fichiers.
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'utilisation de rsync
vous donne la possibilité de reprendre. Cela peut être un avantage notable si votre transfert est très important et, par exemple, votre réseau électrique n'est pas fiable. L'utilisation de rsync sera un moyen plus stable d'éviter la corruption des données en cas de panne et de reprendre là où vous vous étiez arrêté.
y aurait-il un avantage à utiliser rsync pour déplacer le contenu d'un dossier A, c'est-à-dire un dossier B, B étant vide?
Je me suis retrouvé dans une situation où rsync IS plus rapide que mv simplement parce que mv ne peut pas gérer le nombre de fichiers dans le 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 termine avec un échec car elle ne peut pas allouer de ressources.
cependant, rsync semble gérer tous les fichiers sans problème.
Si vous souhaitez fusionner récursivement les répertoires ... déplacer un répertoire dans un autre répertoire avec potentiellement doublon noms de répertoires, alors veuillez voir ma réponse ici sur serverfault.com. mv
fait un mauvais travail lorsque des répertoires existent avec le même nom, et rsync
copie (lecture + écriture des données complètes) chaque fichier au lieu de simplement les déplacer (lecture et écriture uniquement des métadonnées).
Il n'y a aucun moyen de déplacer des fichiers en utilisant rsync comme le ferait la commande Linux mv. En utilisant --remove-source-files, vous copiez essentiellement des fichiers vers la destination, puis supprimez des fichiers (à l'exception des répertoires) de la source. Cela pourrait atteindre votre objectif de déplacer des fichiers, mais vous n'économiserez PAS de temps ni d'opérations d'E/S.