J'ai déjà recherché cette option, mais je n'ai trouvé que des solutions impliquant des correctifs personnalisés . Le fait qu'il n'apparaisse pas dans --help et qu'aucune autre information ne peut être trouvée indique probablement que la réponse est non, mais j'aimerais que cela soit confirmé.
Est-il possible d'afficher la progression totale du transfert de fichiers avec rsync?
Réponses:
Danakim a raison. Il n'y a pas de moyen trivial d'ajouter un indicateur de progression totale.
La raison en est que, lorsque rsync examine une liste de fichiers à synchroniser, il ne sait pas à l’avance quels fichiers devront être modifiés. Si vous effectuez des transferts delta, les deltas eux-mêmes doivent être calculés à l'avance pour donner une image globale du travail à effectuer.
En d’autres termes, le moyen le plus simple de calculer le travail qui reste à faire est de le faire.
la source
--size-only
ou similaires.Il existe maintenant un moyen officiel de le faire dans rsync (version 31.0 du protocole version 31, testée avec Ubuntu Trusty 14.04).
J'ai essayé avec mon
/usr
dossier parce que je voulais cette fonctionnalité pour transférer des systèmes de fichiers entiers, et/usr
semblait être un bon échantillon représentatif.Le
--info=progress2
donne un bon pourcentage global, même s'il ne s'agit que d'une valeur partielle. En fait, mon/usr
dossier contient plus de 6 concerts:et a
rsync
pris beaucoup de temps pour tout analyser. Donc presque tout le temps que j'ai vu a été complété à environ 90%, mais néanmoins, il est réconfortant de voir que quelque chose est en train d'être copié :)Références:
la source
--info=progress2
cela ne fonctionne pas-v
--no-i-r
commutateur, afin dersync
ne pas numériser de manière incrémentielle mais complète avant la copie et sait que + affiche le volume de travail restant.--human-readable
(ou-h
) pour afficher la taille totale en Mo / Go .. en cours.Vous pouvez avec 'pv' (
apt-get install pv
avec Debian et Ubuntu). Je recommande de surveiller le nombre de fichiers transférés, car la quantité de données transférées n’est pas corrélée à la taille des fichiers mais au delta entre la source et la destination. Et compter les fichiers comptera la même progression pour un grand delta et un autre avec un petit delta. Ce qui signifie que, dans tous les cas, l'estimation de l'ETA pourrait être très éloignée. L’ETA basé sur la taille ne fonctionne que si votre destination est vide, dans ce cas delta == taille de la source.L'idée générale est d'émettre une ligne par fichier 'transféré' de rsync et de compter ces lignes avec 'pv':
Je tends à des systèmes de fichiers entiers de sauvegarde (pour plusieurs raisons), dans ce cas , vous pouvez utiliser le beaucoup moins cher
df
pour obtenir le nombre de fichiers (plutôt quedu
oufind
Wich traversera la hiérarchie source une autre fois après rsync l' a fait). L'option -x apparaît pour vous assurer que rsync reste sur le même système de fichiers source (et ne suit pas les autres montages internes):Si vous voulez compter les fichiers dans / source de manière générale, utilisez
find /source|wc -l
(warning à nouveau: peut être lent et lourd sur les E / S).la source
df -i /source
obtenir le nombre d'inodes (fichiers) de toute la partition dans laquelle / source réside. Sinon, utilisez 'find' pour compter les fichiers dans un répertoire de l'expression "$ ()".du
oufind
- disons que vous terminez une copie incomplète ou effectuez une mise à jour sur place avec des suppressions - consiste à utiliserrsync -ai --dry-run
pour obtenir la même liste de fichiers que la séquence principale sera transmise àpv
Ce qui suit s'applique à la version 3.0.0 et ultérieure de rsync. Les options décrites ci-dessous ont été introduites dans cette version le 1er mars 2008.
En plus de --info = progress2, vous pouvez également utiliser l' option --no-inc-récursive (ou son raccourci --no-ir alias) pour désactiver la récursion incrémentielle.
Cela générera la liste de fichiers complète au début, plutôt que de découvrir de manière incrémentielle davantage de fichiers au fur et à mesure du transfert. Puisqu'il connaîtra tous les fichiers avant de commencer, cela donnera un meilleur rapport sur l'avancement général. Ceci s’applique au nombre de fichiers - il ne rapporte aucune progression en fonction de la taille des fichiers.
Cela implique un compromis. Construire la liste de fichiers complète à l’avance est plus coûteux en mémoire et peut retarder considérablement le début du transfert. Comme vous vous en doutez, plus il y a de fichiers, plus le délai est long et plus la mémoire requise est importante.
Ce qui suit est extrait du manuel de rsync (source - http://rsync.samba.org/ftp/rsync/rsync.html ):
Voir aussi https://rsync.samba.org pour connaître les différences de version spécifiques (faites défiler vers le bas et consultez les liens des nouvelles de publication).
la source
Pour les longs transferts, je suis heureux de courir des
du -s
deux côtés. Mêmewatch -n1 du -s
si je me sens vraiment anxieux.watch
exécute une commande (du -s
ici) périodiquement (toutes les secondes ici) et affiche la sortie en plein écran.la source
watch
commande!Fondamentalement non. Vous pouvez uniquement afficher la progression par fichier avec l'indicateur --progress, mais c'est à peu près tout.
J'imagine que vous pouvez écrire un wrapper autour de celui-ci ou utiliser l'un des correctifs que vous avez déjà trouvés, mais vous devez vous demander si cela en vaut vraiment la peine. Avez-vous réellement besoin d'un progrès total pour rsync?
la source
--progress
travaillez--info=progress2
, cela vous montrera la progression globale. Vous devrez désactiver l'algorithme récursif supplémentaire pour qu'il soit utile, donc--info=progress2 --no-inc-recursive
J'ai utilisé la réponse de zerodeux et écrit mon propre petit script bash:
la source
J'ai également cherché comment afficher les progrès totaux avec rsync et j'ai trouvé un répondeur utile à partir de ce post: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
En gros, vous pouvez utiliser --info = progress2 dans la version dev de rsync 3.1.0 . Voici ce que le doc a dit:
la source
--info=name0
est d'or 🌈👑J'ai utilisé la réponse de zerodeux et écrit mon propre petit script BASH:
J'ai changé le TODO dry-run en
Il trouve le nombre de fichiers très vite!
la source
find
ne fonctionne que si vous êtesrsync
local.rsync --dry-run
fonctionne aussi avec des sources distantes ...Si vous ne possédez pas la dernière version de rsync (par exemple, OS X est 2.6.9) et que vous ne pouvez pas l'utiliser
--info=progress2
, voici une autre alternative pour vous enregistrer à partir des pages de texte défilant en cours:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Cela affichera sur une ligne le nom du dernier fichier en cours de transfert:
Transferring: the-latest.file
la source
Utilisation
Pour voir quels fichiers rsync a actuellement ouverts (montrera la taille du fichier), rsync est copié dans un fichier caché localement
la source
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
mais votre solution est plus simple.J'en ferais un commentaire, mais je n'ai pas assez de réputation. En réponse au commentaire de naught101 sur la réponse choisie, l'option --progress indique le nombre de fichiers transférés sur le montant total à transférer. Je n'avais pas compris cela avant de regarder ce post et de regarder la sortie plus attentivement.
La statistique «à vérifier» indique le nombre de fichiers laissés sur le total. Ceci est très utile lors de la synchronisation vers une nouvelle destination afin que vous sachiez que tous les fichiers seront entièrement copiés.
De la page de manuel:
la source
Notez que même --info = progress2 n'est pas entièrement fiable car ce pourcentage est basé sur le nombre de fichiers que rsync «connaît» au moment où la progression est affichée. Ce n'est pas nécessairement le nombre total de fichiers à synchroniser (par exemple, s'il détecte un grand nombre de fichiers volumineux dans un répertoire profondément imbriqué). Une façon de s’assurer que --info = progress2 ne "saute pas en arrière" dans l’indication de progression serait de forcer rsync à analyser tous les répertoires de manière récursive avant de lancer la synchronisation (au lieu de son comportement par défaut consistant à effectuer une analyse incrémentielle récursive), en fournissant également l'option --no-inc-récursive. Notez cependant que cette option augmentera également l'utilisation de la mémoire rsync et son exécution.
la source
--no-inc-recursive
option ou de son--no-i-r
alias plus court . (Voir autre réponse)J'utilise un script qui extrait les informations de / proc // io pour le processus rsync (ou tout autre processus) et sachant que le montant total à transférer permet de calculer la progression.
la source
Si votre version de
rsync
n'accepte pas l'--info=progress2
option, vous pouvez utilisertqdm
:À installer:
Utiliser:
la source
Peut-être que vous pouvez combiner
pv
avec rsync. Surtout le paramètre--size
pourrait être utile. En regardant les docs, quelque chose commepv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
devrait fonctionner.Ici vous trouverez la documentation et des logiciels.
Je n'ai pas essayé cela seul.
la source
Peut-être un peu tard ici, mais les futurs demandeurs de réponses pourraient en bénéficier.
Cela m'ennuyait aussi, alors j'ai pensé que je devrais me salir et écrire mon premier script. Le paquet zenity doit être installé (sudo apt-get install zenity), mais je suis sûr qu'il le sera probablement déjà. De plus, j'utilise wmctrl (contrôle du gestionnaire de fenêtres) pour changer le titre de la boîte de dialogue de progression, une fois celle-ci terminée. Il est facile à installer, mais ne changera rien si vous ne le faites pas. J'aime juste voir quand c'est fait dans mon panel.
Le script demande en gros un répertoire source et un répertoire de destination, calcule le pourcentage de la destination par rapport à la source en utilisant du et affiche une barre de progression.
Note: Ceci ne fonctionne que pour la synchronisation complète de répertoire / fichier (je l'utilise généralement pour faire des sauvegardes de cache d'apt), donc pas d'option --exclude = / file / in / répertoire-source. Cela ne fonctionnera pas non plus s'il y a des fichiers / répertoires dans le répertoire de destination, pas dans le répertoire source. Je ne sais pas si cela fonctionne pour les sources / destinations distantes car je n'en ai jamais eu besoin ni des ressources pour le tester.
PS Ce script peut être très mal écrit ou très inefficace (script-vierge ici), mais au moins il remplit son objectif et vous pouvez bien sûr l'éditer et l'améliorer pour l'adapter à vos besoins. PSS. En outre, impossible d'obtenir le bouton d'annulation pour tuer rsync alors je l'ai simplement supprimé.
la source