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


Sinon, existe-t-il un autre utilitaire de ligne de commande capable d'y parvenir?


274
2017-12-14 04:48


origine




Réponses:


Tandis que cp n'a pas cette fonctionnalité, vous pouvez utiliser pv pour faire ça:

pv my_big_file > backup/my_big_file

Remarque: cette méthode perd les autorisations et la propriété du fichier. Les fichiers copiés de cette manière auront les mêmes autorisations que si vous les aviez créés vous-même et vous appartiendraient.

Dans cet exemple, pv fondamentalement juste sort le fichier à stdout *, que vous redirigez vers un fichier en utilisant le > opérateur. Simultanément, il imprime des informations sur la progression vers le terminal lorsque vous le faites.

Voici à quoi ça ressemble:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

Vous devrez peut-être Installer pv (alternativement, tapez sudo apt-get install pv) sur votre système.


*: Le peu technique

Il existe trois flux de données importants dans un système de type Unix: stdout (sortie standard), stderr (erreur standard) et stdin (entrée standard). Chaque programme a les trois, pour ainsi dire. le > L'opérateur de redirection redirige la sortie du programme vers un fichier. Sans arguments, comme vous le voyez ci-dessus, > redirige un programme sortie standard à un fichier. cp fait fondamentalement rien de plus sophistiqué que

cat source > destination

(où cat lit simplement un fichier et l’imprime dans stdout). pv est juste comme chat, mais si vous redirigez son flux de sortie ailleurs, il imprimera les informations de progression à la sortie standard.

Jeter un coup d'œil à man pv en apprendre plus à ce sujet.


Une autre option, comme alt textDoR suggère dans cette réponse, est d'utiliser rsync à la place:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

Cela permettra de conserver les autorisations et la propriété des fichiers tout en montrant les progrès.


204
2017-12-14 05:17



Il peut ou peut ne pas être significatif (selon la situation), mais pv ne gère pas les autorisations de la même manière que cp fait ... (basé sur un test rapide j'ai essayé: pv n'a pas copié le bit d'exécution sur .. rsync fait. - Peter.O
OMI: alias cp="rsync -avz" cp est obsolète. - Marco Ceppi♦
Si vous êtes comme moi et oubliez pv, vous pouvez aller fouiner /proc/PID of cp/fd et /proc/PID of cp/fdinfo pour comprendre les progrès. (À vous de déduire la vitesse.) J'utilise cette technique pour regarder updatedb. - Thanatos
Oui, -z ne devrait probablement être utilisé que pour les copies réseau; La compression et la décompression des données pour une copie locale sont purement supplémentaires. - Matthew Read
@ Rodrigo rsync -avzP est ce que vous voudrez utiliser. - Marco Ceppi♦


Il n'y en a pas. Voir ici sur pourquoi. Bien qu'il fasse plus que ce dont vous avez besoin, rsync en a un avec --progress paramètre. Le -a conservera les permissions, etc., et -h sera lisible par l'homme.

rsync -ah --progress source destination

Le résultat ressemblera à ceci:

Pictures/1.jpg
      2.13M 100%    2.28MB/s    0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
      1.68M 100%    1.76MB/s    0:00:00 (xfr#5899, to-chk=0/5905)

130
2017-10-15 08:06



Cela fonctionne très bien dans le Ubuntu actuel (14.10). Il soutient également le -r flag to recurse récits. Il peut même être aliasé en remplacement direct de cp: alias cp="rsync -ah --progress" - rustyx
Fonctionne sous OS X, avec l'avantage de pouvoir utiliser les outils fournis avec le système. - Ivan X
c'est génial, la sortie ressemble à filename MB-copied MB-speed time-remaining) - Rudolf Olah
J'aime cette alternative mieux que pv, spécialement parce que rsync fait partie de l'installation standard - Joao Costa
@bartekbrak merci pour le partage. Je suis actuellement sur MacOS 10.12.x avec la version homebrew de rsync 3.1.2 et en utilisant --progress fait tourner la tête en regardant tout l’affichage de sortie du terminal. Donc, ceux qui viennent ici des recherches de mots-clés AOL, rsync -ah --info=progress2 [source] [destination]  présente la sortie de manière un peu plus saine, à mon humble avis. - Chris


Si vous voulez voir si vos fichiers sont transférés correctement, vous pouvez utiliser gcp et gcp est comme cp mais par défaut vous donne une barre de progression pour que vous puissiez voir ce qui est copié. Comme le programme notes wiki, gcp a plusieurs fonctionnalités utiles telles que

  • indication de progression du transfert
  • copie continue en cas d'erreur (passez au fichier suivant)
  • enregistrement de l'état de la copie: gcp enregistre toutes ses actions afin de pouvoir savoir quels fichiers ont été copiés avec succès
  • nom mangling pour gérer les limitations du système de fichiers cible (par exemple, suppression de caractères incompatibles "*" ou "?" sur FAT)

Toutefois, même si la barre de progression a atteint 100% lors de l'utilisation de l'outil, vous devez attendre que l'invite de terminal réapparaisse avant de retirer en toute sécurité votre média afin de vous assurer que le processus de transfert s'est terminé avec succès.

gcp est utilisé pour copier des fichiers et a des options telles que --preserve afin que divers attributs et autorisations peuvent être préservés et --recursiveafin que des répertoires entiers puissent être copiés. Plus d'informations sur ses options peuvent être trouvées en entrant man gcp ou en allant à la Pages de manuel Ubuntu en ligne. Un tutoriel est également disponible sur ce site.

Installer gcp des dépôts avec

sudo apt-get install gcp

(Remarque: dans Ubuntu 12.10, le nouveau point de montage automatique est, par exemple, /media/user/usbdisk)

Vous pouvez copier un fichier sur votre média en entrant

gcp /home/mike/file.mp4 /media/usb

et copier un dossier sur votre média avec

gcp -rv ~/Podcasts /media/Mik2

Exemple de sortie de gcp avec la barre de progression:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

Vous pouvez bien sûr spécifier plusieurs fichiers ou dossiers à copier sur votre disque, et de nombreuses autres options sont couvertes. man gcp.


84
2017-10-15 11:09



Vous avez une erreur avec ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
si vous avez un écran X11 ouvert sur la machine, vous pouvez simplement définir export DISPLAY=:0.0 avant de commencer gcp. Si la machine est sans tête, alors vous devrez lancer une xsession dans un framebuffer virtuel ou quelque chose, à ce stade, vous devriez probablement chercher un autre programme - user292067
gcp est assez décent mais l'exigence DBUS / X est étrange. Je l'ai traité via SSH en utilisant ssh forwarding: ssh -X user@host et cela m'a permis de l'exécuter. - Oli♦


J'apprécie d'utiliser cURL dans ce but précis. La page de manuel répertorie le protocole "FILE" comme supporté, donc utilisez-le comme n'importe quel protocole dans une URL:

curl -o destination FILE://source

Vitesse, progression, temps restant et plus encore, le tout dans un format familier.


54
2018-02-02 09:00



C'est particulièrement bien dans les environnements où il vous est interdit d'installer de nouveaux outils et où rsync n'est pas disponible.
Brillant, cela doit être un hack incontournable! - ionreflex
Bonne réponse! Intelligent! - 9301293
Cela a probablement la même inconvénient comme pv, qu'il n'enregistre pas les autorisations. - Ploni


Bien qu’il n’affiche pas la vitesse, lors de la copie de plusieurs fichiers, le -v option à la cp commande vous fournira des informations de progression. par exemple.

cp -rv old-directory new-directory

22
2017-12-14 17:17



Informations de progression? Ceci est juste une sortie verbeuse. Pour fournir des informations de progression, vous devez au moins avoir besoin de savoir combien de fichiers, voire de fichiers, doivent être copiés. - Julian F. Weinert


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

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

$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18
p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...

19
2018-02-25 14:34



Joli. Comment cela fonctionne-t-il avec des pourcentages? Je suppose que seulement en cas de fichier ouvert en lecture seule? Et cela ne fonctionnera probablement pas en cas d'accès dispersé. - j_kubik
Dans ce cas, vous pouvez également utiliser un autre terminal pour exécuter pkill -USR1 dd faire dd montrer son statut, une autre option serait watch -n 1 pkill -USR1 dd pour le faire montrer périodiquement sa progression (chaque seconde). - Yaron
Droite. De nombreux outils ont été conçus pour rapporter des statistiques au fil du temps. dd ne fait pas exception. Les implémentations modernes ont une option status = progess. Showspeed est une solution classique de style Unix "un outil pour un seul but" - tout comme pv. Mais il a différentes utilisations: pensez aux gobelets pompant un fichier via ghostscript ou vous voulez connaître l'ETA pour un cp ou un tar en cours. Cela peut être fait à 95% après quelques heures et vous ne voudrez probablement pas le redémarrer simplement pour ajouter du pv ... Un accès dispersé ne fonctionnerait pas bien. Showspeed seuls les échantillons recherchent des positions. - Jürgen Weigert


Tandis que pv peut traiter avec local cp tâches, en utilisant dd avec pv peut traiter à la fois local (cp) et à distance (scp) les tâches.

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

S'il vous plaît assurer le path/to/dest.mkv sort par touch path/to/dest.mkv

Cela peut montrer la progression, mais si vous voulez les informations de pourcentage,

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

Remplacer 100M ci-dessus avec la taille réelle de votre fichier source.

Voici la pièce distante

Tandis que scp peut difficilement montrer les progrès actuels, en utilisant dd avec pv est un morceau de gâteau.

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

11
2018-01-05 08:08



Plus récent dd a status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功


Il y a un nouvel outil appelé cv qui peut trouver n'importe quel descripteur lié à une commande en cours d'exécution et montrer la progression et la vitesse: https://github.com/Xfennec/cv

cv -w

affiche les statistiques pour toutes les opérations cp, mv, etc.


10
2017-07-13 11:33



watch cv -q est encore plus propre - nwgat
Il ne montre que les progrès pour un fichier individuel, il se rend compte si un cp copie un répertoire de manière récursive ou non. - Flimm
Il guerre renommé pour progresser. Excellent outil! - sebastian


Il y a un outil appelé progress dans les référentiels qui peuvent examiner différentes commandes et afficher des informations de progression pour eux.

Installez-le en utilisant la commande

sudo apt-get install progress

Cet outil peut être utilisé comme ça:

cp bigfile newfile & progress -mp $!

Sortie:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)

10
2017-09-26 22:35





Comme beaucoup l'ont dit, cp n'inclut pas cette fonctionnalité.

Juste pour jeter mes 0,02 $, ce que je fais habituellement avec des situations de copie triviales (c’est-à-dire non -R):

  1. Voir la taille du fichier et se souvenir

  2. Commencez à copier

  3. Ouvrir un autre terminal

  4. Courir watch ls -lh DIR sur le répertoire où la cible est

Cela peut me tenir au courant de la taille du fichier cible, avec un minimum de tracas.

Comme alternative pour des situations moins triviales, par ex. copier récursivement des répertoires, vous pouvez utiliser watch du -hs DIR pour voir le résumé de la taille de DIR. Cependant, le calcul peut durer longtemps et peut même ralentir la copie, vous pouvez donc vouloir utiliser -n INTERVAL argument à surveiller pour que ce compromis soit acceptable.

Mettre à jour: Si vous utilisez des caractères génériques avec une commande utilisée avec watch du, par ex. watch du -hs backup/*, n'oubliez pas de citer:

watch "du -hs backup/*"

sinon les wild-cards seront étendues juste une fois, quand la montre est commencé donc du ne regardera pas les nouveaux fichiers / sous-répertoires.


6
2017-11-16 13:20



Ne répond pas à la partie "vitesse", cependant ... - Alois Mahdal