Ho appena notato il commento su MacOS, e mentre penso che la soluzione di @akira (e pv) sia molto più ordinata, ho pensato di inseguire un sospetto e un rapido playaround nella mia scatola di MacOS con tar e inviargli un segnale SIGINFO. Stranamente, ha funzionato :) se sei su un sistema simile a BSD, questo dovrebbe funzionare, ma su un box Linux, potresti dover inviare un SIGUSR1 e / o tar
potrebbe non funzionare allo stesso modo.
Il rovescio della medaglia è che ti fornirà solo un output (su stdout) che ti mostra quanto è lontano il file corrente dal momento che immagino che non abbia idea di quanto sia grande il flusso di dati che sta ottenendo.
Quindi sì, un approccio alternativo sarebbe quello di accendere il catrame e inviarlo periodicamente ai SIGINFO ogni volta che vuoi sapere fino a che punto è arrivato. Come fare questo?
L'approccio manuale ad hoc
Se vuoi essere in grado di controllare lo stato su una base ad-hoc, puoi control-T
premere (come ha detto Brian Swift) nella relativa finestra che invierà il segnale SIGINFO. Un problema con questo è che lo invierà a tutta la tua catena, credo, quindi se stai facendo:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
Vedrai anche bzip2 segnalare il suo stato insieme a 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)
Funziona bene se vuoi solo controllare se tar
stai funzionando è bloccato o solo lento. In questo caso probabilmente non dovrai preoccuparti troppo dei problemi di formattazione, dato che è solo un rapido controllo.
Il tipo di approccio automatizzato
Se sai che ci vorrà un po 'di tempo, ma vuoi qualcosa come un indicatore di progresso, un'alternativa potrebbe essere quella di avviare il tuo processo tar e in un altro terminale risolverlo è PID e poi lanciarlo in uno script che invia ripetutamente un segnale . Ad esempio, se hai il seguente scriptlet (e invocalo come dire 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?"
Se lo invochi in questo modo, poiché stai prendendo di mira solo tar
otterrai un output più simile a questo
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)
...
che ammetto, è piuttosto carino.
Ultimo ma non meno importante, il mio scripting è un po 'arrugginito, quindi se qualcuno vuole entrare e ripulire / correggere / migliorare il codice, vai per la tua vita :)