
La linea di comando permette di svolgere velocemente operazioni complesse, ma quando si incominciano ad usare pipe è difficile sapere quanto durerà l’elaborazione dei dati.
Per ovviare a questo problema possiamo ricorrere al semplice, quanto utile, comando pv (Pipe Viewer). Come si intuisce già dal nome, il suo scopo è monitorare i dati che passano attraverso una pipeline e stampare a video le informazioni ottenute. Potremo così leggere facilmente il tempo trascorso, la percentuale di completamento, il throughput attuale, il totale dei dati trasferiti ed un orario stimato per la fine del processo.
Pv ha alcune opzioni per personalizzare l’output su terminale e legge un file in input per copiare tutti i suoi byte su stdout. Nel caso non si passi un file come parametro i dati verranno presi da stdin.
Ecco due esempi del medesimo programma scritto nelle due forme per mostrare la differenza:
pv file | nc -w 1 somewhere.com 3000
cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
Nel secondo esempio è presente anche il parametro “-s” che serve per informare pv sulle dimensioni del flusso dei dati in entrata. Parametro che nella versione iniziale non serviva poiché pv leggeva direttamente la dimensione del file. Quando usiamo pv all’interno di una pipeline per ottenere il massimo è necessario informarlo sulla dimensione dei dati in input ed il prossimo esempio è utile per darne una piccola panoramica.
SIZE=`du -sk directory | cut -f 1`
tar cf - directory | pv -p -s ${SIZE}k | bzip2 -c > directory.tar.bz2
Se poi volessimo proprio esagerare dopo un po’ di pratica potreste arrivare facilmente a scrivere linee di questo tipo:
(tar cf - .
| pv -n -s $(du -sb . | awk '{print $1}')
| gzip -9 > out.tgz) 2>&1
| dialog --gauge 'Progress' 7 70
Questo esempio sfrutta l’interfaccia di dialog per mostrare la percentuale di elaborazione. Se vi capita di usare pv provate a condividere con noi l’uso che ne fate.
Via | ServerWatch
Pv, pipe viewer é stato pubblicato su Ossblog.it alle 12:00 di giovedì 04 agosto 2011.