Algunos programas de compresión pueden mostrar información (como la relación de compresión o los totales de tiempo y tamaño) mientras realizan la tarea, como xz -v
:
--- % 2,580.2 KiB / 6,552.0 KiB = 0.394 1.2 MiB/s 0:05
Al comprimir un archivo grande, me gustaría saber la relación de compresión a la mitad de la tarea, para poder detener el proceso si la relación de compresión es baja y dejarlo sin comprimir.
¿Hay otros programas con esta función? (xz
tiene una relación de compresión alta pero es lento)
Respuesta aceptada:
La forma genérica de hacer esto es usar algo como pv
para controlar tanto el tamaño de entrada como el de salida del programa de compresión. Por ejemplo:
$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null
out: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
in: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
Es bastante fácil ver arriba que el tamaño de salida es el mismo que el tamaño de entrada, como se esperaba al intentar comprimir datos aleatorios.
Si en cambio probamos con un archivo que se comprime muy bien:
$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null
out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [ <=> ]
in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [ <=> ]
El tamaño de salida es de 2,62 MiB, la entrada es de 2,65 GiB:3 órdenes de magnitud más grandes.
Como beneficio adicional, si se usa en un archivo normal, pv
le dará una ETA:
$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null
out: 578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [ <=> ]
in: 595MiB 0:00:27 [22.1MiB/s] [ 22MiB/s] [==> ] 15% ETA 0:02:25
La imagen del DVD de Jessie consiste principalmente en archivos comprimidos, por lo que no se comprime tan bien, pero tardará otros dos minutos y medio en completarse.
También puede usar pv -d
para monitorear un proceso que ya se está ejecutando; si lo aplica a un compresor en ejecución, le indicará dónde se encuentra en el archivo de entrada frente al archivo de salida, lo que nuevamente le permitirá ver rápidamente la proporción:
$ pv -pterba -d "$(pidof gzip)"
3:/var/tmp/mp3s.tar: 911MiB 0:00:44 [ 20MiB/s] [19.9MiB/s] [> ] 9% ETA 0:07:35
4:/var/tmp/mp3s.tar.gz: 906MiB 0:00:44 [ 20MiB/s] [19.8MiB/s] [ <=> ]
Los archivos tar de MP3 tampoco se comprimen bien.
(Las opciones de pv que estoy usando:-p
para encender la barra de progreso; -t
para encender el tiempo transcurrido; -e
encender la ETA; -r
para mostrar la tasa de transferencia; -b
para activar el contador de bytes; -c
para hacer múltiples pv
s en una tubería; -N
para configurar las etiquetas).