493 votes

Comment afficher la progression du transfert et la vitesse lors de la copie de fichiers avec cp?

Sinon, y a-t-il une autre utilitaire en ligne de commande qui puisse réaliser cela?

1 votes

2 votes

Au cas où vous auriez déjà lancé la commande cp et que vous ne voulez pas l'arrêter maintenant, vous pouvez watch la taille de la destination augmenter comme ceci: askubuntu.com/a/1275972/327339 (watch 'du -hs'), pour savoir qu'elle augmente vraiment et que la copie fonctionne.

38voto

Petey Points 135

Alors qu'il n'affiche pas la vitesse, lors de la copie de plusieurs fichiers, l'option -v de la commande cp vous fournira des informations sur la progression. par exemple.

cp -rv old-directory new-directory

14 votes

Informations de progression ? Il s'agit simplement d'une sortie verbeuse. Pour fournir des informations de progression, vous auriez au moins besoin de savoir combien de fichiers, ou même quels fichiers, doivent être copiés.

3 votes

Il indique sur quel fichier il se trouve, ce qui peut être suffisant dans les cas moins exigeants.

20voto

Jürgen Weigert Points 571

Le noyau connaît la plupart des données telles que la vitesse, et souvent aussi le pourcentage. Les noyaux modernes exposent cela via leur système de fichiers /proc.

showspeed de https://github.com/jnweiger/showspeed utilise cette information. Il peut se connecter à des programmes déjà en cours d'exécution et donner des mises à jour périodiques comme ceci :

$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd ressemble à un nom de processus. pid=4417 correspond à av0=dd.
p/4417/fd/0r /home/jw/bigfile 113Mo/s (12%, 2.3Go)  9m:35
p/4417/fd/1w /tmp/otherbigfile 182Mo/s (2.6Go)
p/4417/fd/0r /home/jw/bigfile 285Mo/s (15%, 3.0Go)  8m:08
p/4417/fd/0r /home/jw/bigfile 115Mo/s (16%, 3.2Go)  8m:01
p/4417/fd/0r /home/jw/bigfile 107Mo/s (17%, 3.4Go)  7m:39
p/4417/fd/1w /tmp/otherbigfile 104Mo/s (3.5Go)
p/4417/fd/0r /home/jw/bigfile 139Mo/s (19%, 3.7Go)  7m:37
p/4417/fd/0r /home/jw/bigfile 116Mo/s (20%, 3.9Go)  7m:18
p/4417/fd/1w /tmp/otherbigfile  67Mo/s (4.0Go)
p/4417/fd/1w /tmp/otherbigfile 100Mo/s (4.1Go)
...

0 votes

Belle question. Comment ça fonctionne pour les pourcentages cependant? Je suppose que seulement en cas de fichiers ouverts en lecture seule? Et cela ne fonctionnera probablement pas en cas d'accès dispersé.

1 votes

Dans ce cas, vous pouvez également utiliser un autre terminal pour exécuter pkill -USR1 dd afin de faire afficher le statut de dd, une autre option serait watch -n 1 pkill -USR1 dd pour afficher périodiquement son progrès (toutes les secondes).

0 votes

D'accord. De nombreux outils ont une manière intégrée de rapporter des statistiques au fil du temps. dd ne fait pas exception. Les implémentations modernes ont une option status=progress. Showspeed est une solution classique de style unix "un outil pour un usage" - tout comme pv. Mais il a des cas d'utilisation différents: pensez à cups qui pompe un fichier à travers ghostscript ou si vous voulez connaître le ETA pour une cp ou tar en cours. Il pourrait être déjà à 95% après quelques heures et vous ne voulez probablement pas le redémarrer juste pour ajouter pv ... L'accès dispersé ne fonctionnerait pas bien. Showspeed ne fait que des échantillonnages des positions de recherche.

13voto

onemach Points 241

Alors que pv peut gérer les tâches locales de cp, utiliser dd avec pv peut gérer à la fois les tâches locales (cp) et les tâches à distance (scp).

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

Veuillez vous assurer que le path/to/dest.mkv existe en exécutant touch path/to/dest.mkv

Cela peut afficher la progression, mais si vous souhaitez des informations sur le pourcentage,

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Remplacez 100M ci-dessus par la taille réelle de votre fichier source.

Voici la Partie à Distance

Alors que scp peut difficilement montrer la progression actuelle, utiliser dd avec pv est un jeu d'enfant.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

2 votes

Newer dd a status=progress: askubuntu.com/a/824895/52975

12voto

S Lentz Points 121

Si vous avez rsync 3.1 ou une version supérieure (rsync --version), vous pouvez copier (cp -Rpn) tout en préservant les autorisations et la propriété, en parcourant les répertoires, en évitant de remplacer les fichiers déjà existants et afficher la progression globale (plutôt que simplement la progression par fichier), le taux de copie, et le temps estimé restant (très approximatif) avec :

sudo rsync -a --info=progress2 --no-i-r /source /destination

Remarquez que sudo n'est nécessaire que si vous traitez des répertoires/fichiers que vous ne possédez pas. De plus, sans le --no-i-r, le pourcentage peut revenir à un nombre inférieur à un certain moment pendant la copie. Peut-être que les versions ultérieures de rsync passeront par défaut à no-i-r avec info=progress2, mais ce n'est pas le cas dans la version actuelle 3.1.2.

J'ai remarqué que le pourcentage et le temps restant sont grandement surestimés lorsque vous copiez vers un répertoire qui contient déjà des fichiers (c'est-à-dire lorsque vous utilisez généralement cp -n "no clobber").

11voto

Tomas Markauskas Points 709

Il existe un nouvel outil appelé cv qui peut trouver n'importe quel descripteur lié à une commande en cours d'exécution et afficher le progrès et la vitesse : https://github.com/Xfennec/cv

cv -w

affiche les statistiques de toutes les opérations en cours de cp, mv, etc.

0 votes

regarder cv -q est encore plus propre

0 votes

Il ne montre que la progression pour des fichiers individuels, il ne réalise pas si une commande cp est en train de copier un répertoire de manière récursive ou non.

2 votes

Il a été rebaptisé en progrès. Excellent outil!

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