Le monde informatique est différent derrière un TeleType ou un autre terminal papier. Les choses qui ont tendance à ennuyer les gens à propos d’Unix ou de Linux ces jours-ci étaient parfaitement géniales lorsque vous imprimiez tout ce que l’ordinateur vous disait. Considérez la brièveté de la plupart des commandes de base. Lorsque vous copiez un fichier, par exemple, il ne vous dit pas grand-chose d’autre qu’il vous renvoie à l’invite lorsque c’est fait. Si vous êtes sur un ordinateur moderne travaillant localement avec des fichiers de taille normale, ce n’est pas grave. Mais si vous êtes sur un réseau lent ou avec des fichiers volumineux, ce serait bien d’avoir une barre de progression. Bien sûr, vous pourriez écrire votre propre version de copie, mais ne serait-il pas agréable d’avoir des options plus génériques ?
Sens Unique
Le pv
programme peut faire certaines des choses que vous voulez. Il surveille les données via un tuyau ou, au moins via sa sortie standard. Pensez-y comme cat
avec un mètre. Supposons que vous vouliez écrire une image disque sur /dev/sdz
:
cat diskz.img >/dev/sdz
Mais tu peux aussi faire :
pv diskz.img >/dev/sdz
Par défaut, pv affichera une barre de progression, un temps écoulé, une heure de fin estimée, un taux et un nombre total d’octets. Vous pouvez désactiver tout cela ou ajouter des éléments à l’aide des options de ligne de commande. Vous pouvez également spécifier des éléments tels que la taille du terminal s’il doit compter des lignes au lieu d’octets et, dans le cas où le programme ne sait pas ce qu’il lit, la taille attendue du transfert.
Bien sûr, la sortie de pv
est de stderr
donc ça s’affiche à l’écran. Cela rend difficile si vous voulez l’utiliser avec quelque chose comme un dialogue qui veut que le stdout
être l’indicateur de progrès. Heureusement, vous pouvez rediriger stderr
pour stdout
puis rediriger stdout
à un dossier. Assurez-vous simplement de le faire dans cet ordre. Par exemple:
pv -n /tmp/bigfile.iso 2>&1 >/tmp/bigfile.iso.backup | dialog --gauge "Copy Progress" 10 60
Autrement
Il y a aussi progress
. Il recherche des programmes fonctionnant comme cp
, mv
, dd
, et bien d’autres, examine leurs fichiers ouverts et affiche des informations sur la progression de ces programmes. Il ne le fait qu’une seule fois, vous l’associerez donc généralement à la commande watch ou utiliserez le -M
option. Vous pouvez également surveiller des programmes arbitraires avec un peu d’aide. Par exemple, supposons que vous ayez un gros téléchargement dans firefox :
watch progress -c firefox
En fait, si vous êtes comme moi et que vous avez plus de 32 instances de firefox en cours d’exécution, cela va échouer, mais vous voyez l’idée.
Le programme de progression peut également prendre un tube, mais il ne surveille toujours que les processus qu’il connaît, à moins que vous n’utilisiez -c
. Vous pouvez ajouter à la liste avec le -a
option. Par exemple:
tar czf /tmp/books.tgz ~/library/ebooks | progress -m
Résulte en:

A noter que depuis gzip
est l’un des programmes que le progrès connaît, il apparaît également sur la liste. Vous pouvez, bien sûr, lui dire de ne rechercher que tar
avec -c
.
Comme d’habitude
Comme d’habitude avec Linux, il y a toujours plusieurs façons de faire quoi que ce soit. Si vous êtes masochiste, vous pouvez utiliser ptrace
pour regarder à l’intérieur d’un programme et comprendre les choses à partir de là. Vous pouvez également faire le même truc que progress
fait et regarde à travers un programme /proc
entrées.
Si vous souhaitez ajouter directement une barre de progression à vos scripts shell, essayez gum. Ou peut-être combiner la progression avec des widgets pour mettre le résultat sur votre bureau ?