lunes, 5 de junio de 2017

Visualización del progreso de operaciones con ficheros con "Pipe Viewer"

Comprimir ficheros grandes desde la líea de comandos puede ser pesado y a menos que uses un "file manager" como Midnigth Comander (que desde aquí recomiendo para facilitar la vida en el manejo de la línea de comandos), no tenemos por defecto forma de conocer cómo avanza la operacion o cuanto se supone que hay que esperar para que el proceso concluya.
Aquí es donde tenemos el comando "pv" (Pipe Viewer), un interesante comando que permite visualizar una barra de progreso e incluso el tiempo estimado de finalización.
A continuación algunos ejemplos de su uso :

Comprimir un archivo usando gzip :

pv access.log | gzip > access.log.gz
482MB 0:00:26 [18.3MB/s] [==================================>] 100%

Comprimir un archivo usando bzip2 :

pv access.log | bzip2 > access.log.bz2
482MB 0:04:45 [1.69MB/s] [==================================>] 100%

Descomprimir un archivo usando gzip :

pv access.log.gz | gunzip > access.log
48.5MB 0:00:08 [5.85MB/s] [==================================>] 100%

Descomprimir un archivo usando bzip2:

pv access.log.bz2 | bunzip2 > access.log
25.2MB 0:00:42 [ 607kB/s] [==================================>] 100%

Comprimir el directorio actual con una sola línea de comando :

tar cpf - . | pv -s $(du -sb . | cut -f1) | gzip > archive.tar.gz
1.48GB 0:01:33 [16.3MB/s] [==================================>] 100%

Este es un poco más complicado y requiere algo de explicación: dado que "pv" no puede conocer a priori la cantidad de datos que se transferirán, tenemos que incluir de antemano la información mediante el comando "du"

Hay mucho más que el comando "pv" puede hacer por nosotros, por ejemplo, limitando el flujo de datos de un "pipe" (usando el modificador de salida "-L"). Junto con el modificador de salida "-q" (que desactiva la barra de progreso), es posible su uso para la proyección de animaciones de texto.

Ejecutar una animación  VT100 a 9600 bytes por segundo (un globo que gira):

curl -s http://artscene.textfiles.com/vt100/movglobe.vt | pv -q -L 9600

Y finalmente un grupo de ejemplos más vistosos (que usan el comando "dialog" que es igualmente interesante):

(pv -n backup.tar.gz | tar xzf - -C path/to/data ) 2>&1 | dialog --gauge "Running tar, please wait..." 10 70 0

tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70

tar -cf - . | pv -s $(du -sb . | awk '{print $1}') | gzip > out.tgz
pv linux-source.tar.bz2 | tar -jxf -


No hay comentarios:

Publicar un comentario