GNU/Linux >> Tutoriales Linux >  >> Linux

¿Programa de compresión que muestra la relación de compresión en vivo?

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.

Nota: Muchos compresores funcionan bloque por bloque. Es por eso que puede ver cosas como que la tasa de transferencia aumenta y luego es 0, repita. Debe dejar que el compresor funcione un poco antes de que pueda tener una idea real de la relación esperada. Tenga en cuenta que justo después de un pico, es probable que se lea en un bloque, pero aún no se haya escrito la versión comprimida, pero si ya esperó 10 bloques, eso es un error máximo del 10 %.

Relacionado:¿Qué hace un programa cuando se le envía una señal SIGKILL?

(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).


Linux
  1. Ejecutar un programa java en backend

  2. Soporte multiproceso en 7za

  3. Descarga de CentOS Live CD vs Live DVD

  4. Creando un programa en bin

  5. Mostrando el progreso total en rsync:¿es posible?

5 consejos para dominar Linux

11 comandos de Linux sin los que no puedo vivir

¿Qué es Bonjour en mi computadora? Guía para PC del programa Bonjour de Windows 10

Creando un Live USB de Manjaro Linux en Windows y Linux

Cómo crear Solus OS Live USB

Cómo habilitar la compresión GZIP en Nginx