Je viens de remarquer le commentaire sur MacOS, et même si je pense que la solution de @akira (et pv) est beaucoup plus pratique, je me suis dit que je poursuivrais un pressentiment et une lecture rapide dans ma boîte MacOS avec du goudron et que je lui enverrais un signal SIGINFO. Curieusement, cela a fonctionné :) si vous utilisez un système de type BSD, cela devrait fonctionner, mais sous Linux, vous devrez peut-être envoyer un SIGUSR1 et / ou tar
ne pas fonctionner de la même manière.
L'inconvénient est qu'il ne vous fournira qu'un résultat (sur stdout) vous indiquant la distance parcourue par le fichier actuel, car je suppose qu'il n'a aucune idée de la taille du flux de données qu'il reçoit.
Donc, oui, une autre approche consisterait à utiliser du goudron et à lui envoyer périodiquement des SIGINFO à tout moment pour savoir dans quelle mesure il se trouve. Comment faire ça?
L'approche ad hoc et manuelle
Si vous voulez pouvoir vérifier le statut sur une base ad-hoc, vous pouvez cliquer control-T
(comme mentionné par Brian Swift) dans la fenêtre appropriée qui enverra le signal SIGINFO. Un problème avec cela est qu'il l'enverra à toute votre chaîne, je crois, alors si vous faites:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
Vous verrez également bzip2 signaler son statut avec tar:
a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running
14 0.27u 1.02s
adding folder-with-big-files/big-file.imgload (17760256 / 32311520)
Cela fonctionne bien si vous voulez juste vérifier si tar
votre course est bloquée ou tout simplement lente. Dans ce cas, vous n'avez probablement pas besoin de trop vous soucier du formatage, car il ne s'agit que d'une vérification rapide.
Le genre d'approche automatisée
Si vous savez que cela va prendre un certain temps, mais que vous souhaitez un indicateur de progression, vous pouvez également lancer votre processus tar et, dans un autre terminal, déterminer son PID, puis l'envoyer dans un script qui envoie à plusieurs reprises un signal. . Par exemple, si vous avez le scriptlet suivant (et l'invoquez par exemple script.sh PID-to-signal interval-to-signal-at
):
#!/bin/sh
PID=$1
INTERVAL=$2
SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO,
# sh won't..
kill -0 $PID # invoke a quick check to see if the PID is present AND that
# you can access it..
echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s"
while [ $? -eq 0 ]; do
sleep $INTERVAL;
kill -$SIGNAL $PID; # The kill signalling must be the last statement
# or else the $? conditional test won't work
done
echo "PID $PID no longer accessible, tar finished?"
Si vous l'appelez de cette façon, puisque vous ne ciblez que tar
vous obtiendrez une sortie plus semblable à celle-ci.
a folder-with-big-files/tinyfile.1
a folder-with-big-files/tinyfile.2
a folder-with-big-files/tinyfile.3
a folder-with-big-files/bigfile.1
adding folder-with-big-files/bigfile.1 (124612 / 94377241)
adding folder-with-big-files/bigfile.1 (723612 / 94377241)
...
ce que j'avoue, c'est un peu joli.
Dernier point mais non le moindre - mon script est un peu rouillé, donc si quelqu'un veut y aller et nettoyer / corriger / améliorer le code, poursuivez votre vie :)