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.

11voto

dd status=progress

Option ajoutée dans GNU Coreutils 8.24+ (Ubuntu 16.04) :

dd if=src of=dst status=progress

Le terminal affiche une ligne de type :

462858752 bytes (463 Mo, 441 Mio) copiés, 38 s, 12,2 Mo/s

qui est régulièrement mise à jour.

Voir aussi : Comment surveiller la progression de dd ?

1 votes

Tu voulais dire: stdout est un flux de caractères et de séquences d'échappement vt100 qui font afficher périodiquement une ligne mise à jour sur ton terminal ;). stdout est toujours un flux d'octets et n'a rien à voir avec la façon dont il est affiché (excepté que l'application peut savoir si elle est actuellement attachée à un terminal ou non...)

0 votes

@masterxilo Les débutants s'en moqueront, les experts sauront ;-) hehe

0 votes

Eh bien, je pense qu'il est toujours bon de dire les choses telles qu'elles sont, peut-être en laissant de côté certains détails, mais ne jamais permettre à vos lecteurs de se créer un mauvais modèle mental. Si vous dites que "stdout est une ligne (périodiquement mise à jour)", il semble que vous disiez que stdout est un bloc de mémoire mutable, ce qui n'est pas le cas. Il est important de le savoir même pour les débutants.

9voto

Manuel Points 2369

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

Juste pour donner mon avis, ce que je fais habituellement dans des situations de copie triviales (c'est-à-dire sans -R) :

  1. Voir la taille du fichier et s'en souvenir

  2. Commencer la copie

  3. Ouvrir un autre terminal

  4. Exécuter watch ls -lh DIR dans le répertoire où se trouve la cible

Cela me permet de rester à jour sur la taille du fichier cible, avec un minimum de tracas.

Comme alternative pour des situations moins triviales, par exemple la copie récursive de répertoires, vous pouvez utiliser watch du -hs DIR pour voir le résumé de la taille de DIR. Cependant, du peut prendre du temps pour calculer et peut même ralentir la copie, donc vous voudrez peut-être utiliser l'argument -n INTERVAL pour watch afin que le compromis soit acceptable.

Mise à jour: En cas d'utilisation de jokers avec la commande utilisée avec watch du, par exemple watch du -hs backup/*, n'oubliez pas de mettre des guillemets :

watch "du -hs backup/*"

sinon les jokers seront étendus une seule fois, lorsque watch est démarré, donc du ne regardera pas les nouveaux fichiers ou sous-répertoires.

0 votes

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

5voto

Gabriel Staples Points 5149

Il y a déjà quelques réponses vraiment géniales ici, mais voici mes commandes préférées, y compris ma propre petite astuce sur la commande rsync, avec mes options préférées :

1. watch 'du -hs' (ou, pour plus de granularité : watch -n 1 'du -sk | awk '\''{printf "%.3f Mio %s\n", $1/1024, $2}'\''') vous permet de suivre la croissance de taille d'un dossier de destination si cp est déjà en cours d'exécution :

Et si vous avez déjà lancé un long processus de cp et que vous ne voulez pas l'arrêter maintenant ?

En supposant que vous ayez déjà lancé cette commande de copie :

# copier récursivement source_dir_name vers destination
cp -r source_dir_name destination

Ouvrez simplement un nouveau terminal, avec l'opération de copie déjà en cours, et exécutez :

# accédez au répertoire de destination
cd chemin/vers/destination/source_dir_name

# Maintenant, regardez, en direct, la taille de cette destination augmenter !
watch 'du -hs'

# OU (Préféré !) voyez même plus de granularité, en Mio X.xxx : 
watch 'du -sk | awk '\''{printf "%.3f Mio %s\n", $1/1024, $2}'\''' 

Cela fera en sorte que la commande watch exécute automatiquement du -hs (ou du -sk | awk '{printf "%.3f Mio %s\n", $1/1024, $2}') toutes les 2 secondes (la valeur par défaut de watch) à l'intérieur de votre répertoire de destination, pour que vous puissiez voir la taille du dossier augmenter en temps réel ! Cela ne vous donne pas un pourcentage complet, mais si vous avez une idée approximative de la taille de ce que vous copiez, cela vous donne certainement quelque chose à observer et à apprécier, en sachant que la destination grandit. Voici un exemple de sortie à l'écran de veille :

  1. Cmd: watch 'du -hs'

    Sortie :

    Toutes les 2.0s: du -hs
    
    2.5G    .
  2. Cmd: watch 'du -sk | awk '\''{printf "%.3f Mio %s\n", $1/1024, $2}'\'''

    Sortie :

    Toutes les 2.0s: du -sk | awk '{printf "%.3f Mio %s\n", $1/1024, $2}'
    
    2560.348 Mio .

Au-dessus, vous pouvez voir que la taille actuelle du répertoire actuel (.) est de 2.5 Gio, ou, plus précisément dans le deuxième cas : 2560.348 Mio. Pour faire en sorte que watch utilise un intervalle de mise à jour plus lent, comme 5 secondes, ajoutez simplement -n 5 à la commande watch, comme ceci :

watch -n 5 'du -hs'

# OU (préféré, pour plus de granularité)
watch -n 5 'du -sk | awk '\''{printf "%.3f Mio %s\n", $1/1024, $2}'\'''

2. rsync est vraiment le meilleur pour cela :

Mes commandes préférées :

# simulation
time rsync -rah --dry-run --info=progress2 --stats source destination

# vraie copie (Important ! Faites d'abord une simulation et lisez le résumé de
# la sortie pour vous assurer que vous copiez ce que vous avez l'intention de copier !)
time rsync -rah --info=progress2 --stats source destination

Remarque : la partie time en début des commandes ci-dessus affiche simplement un joli résumé du temps total d'exécution de l'opération à la fin. Cela fonctionne avant n'importe quelle commande Linux.

Voici à quoi ressemble un résumé --stats de rsync pour une --dry-run, au fait :

$ rsync -rah --dry-run --info=progress2 --stats /media/gabriel/cdrom ~/temp
          2.76G 100% 2570.10Gio/s    0:00:00 (xfr#3836, to-chk=0/4837)   

Nombre de fichiers: 4 837 (reg : 3 836, dir : 1 001)
Nombre de fichiers créés : 0
Nombre de fichiers supprimés : 0
Nombre de fichiers réguliers transférés : 3 836
Taille totale des fichiers : 2.76G octets
Taille totale des fichiers transférés : 2.76G octets
Données littérales : 0 octets
Données correspondantes : 0 octets
Taille de la liste des fichiers : 0
Temps de génération de la liste des fichiers : 0.001 secondes
Temps de transfert de la liste des fichiers : 0.000 secondes
Quantité totale d'octets envoyés : 123.88K
Quantité totale d'octets reçus : 15.54K

envoyé 123.88K octets  reçus 15.54K octets  278.85K octets/s
la taille totale est de 2.76G  l'accélération est de 19 792,78 (SIMULATION)

Références :

  1. Endroit où j'ai d'abord documenté le type de commande watch -n 5 'du -sk | awk '\''{printf "%.3f Mio %s\n", $1/1024, $2}'\'', dans mon tutoriel ROS : mon tutoriel ROS.org : Lecture des messages depuis un fichier bag

Lecture supplémentaire :

  1. Ma longue réponse sur certains usages avancés de rsync et autres : https://superuser.com/questions/1271882/convert-ntfs-partition-to-ext4-how-to-copy-the-data/1464264#1464264
  2. [une autre de mes réponses] Unix & Linux : Est-il possible de voir la vitesse de copie et le pourcentage copié ?

4voto

Alex Points 2164

En fonction de ce que vous voulez faire, Midnight Commander (mc) pourrait être la réponse. Je suis surpris que cela n'ait pas encore été mentionné.

Des outils comme pv ou rsync sont utiles pour afficher la progression du transfert d'un gros fichier, mais lorsqu'il s'agit de copier des répertoires/arborescences entières, mc calcule la taille puis affiche la progression de manière très agréable. De plus, il est disponible par défaut sur la majorité des systèmes.

3 votes

C'est disponible dès la sortie de l'emballage sur la majorité des systèmes." ...pas sur toute installation par défaut d'Ubuntu.

3voto

Déjà vu Points 5368

Pv sait comment observer les descripteurs de fichiers donnés par un pid, que ce soit pour cp ou autre chose

D'après la documentation:

   (Linux seulement) : Observation du descripteur de fichier 3 ouvert par un autre processus 1234 :

          pv -d 1234:3

   (Linux seulement) : Observation de tous les descripteurs de fichiers utilisés par le processus 1234 :

          pv -d 1234

Exemple:

md5sum file &
[1] + 1271 suspendu
pv -d 1271
417 MiB 0:00:17 [12,1 MiB/s] [============> ] 29% ETA 0:00:53

$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov:  754 MiB 0:00:04 [97,2 MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov:  754 MiB 0:00:04 [97,3 MiB/s] [ <=> ]

0 votes

Ce texte doit être incorporé dans la réponse sélectionnée.

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