Una barra de progreso de longitud fija, un conteo de archivos o bytes, o mejor aún, un temporizador que muestre el tiempo restante estimado sería ideal.
zip
El comportamiento estándar parece ser imprimir una línea para cada archivo procesado, pero no quiero que esa información se sobrecargue cuando comprimo miles de archivos. Quiero una estimación de cuánto tiempo llevará.
Probé la opción -q
( --quiet
) en combinación con -dg
( --display-globaldots
) pero eso solo inunda stdout con múltiples líneas de puntos y no da ninguna indicación útil.
También intenté -qdgds 10m
como se menciona en la página del manual, pero obtuve el mismo resultado.
Luego probé -db
( --display-bytes
) y -dc
( --display-counts
) pero no parece haber una opción global, por lo que nuevamente la imprime para cada nombre de archivo.
Por último, lo probé junto con -q
like -qdbdc
, pero eso simplemente no genera nada.
Curiosamente, encontré una página de manual en el sitio info-zip que menciona una opción -de
( --display-est-to-go
) que debería "Mostrar una estimación del tiempo para finalizar la operación de archivo".
Eso suena exactamente como lo que quiero, pero el problema es que mi versión de zip
no tiene esa característica. Estoy usando Ubuntu 14.04.1 64bit, bash-4.3.30 (1) y zip-3.00. Según Wikipedia, esta es la última versión estable de zip.
Hay versiones beta inéditas en la página info-zip sourceforge, pero prefiero no confiar mis datos a una versión beta.
tee
. Antes de comenzar el zip, haga un recuento total de los archivos (conls
ofind -type f
) y mientras está comprimiendo, lea el archivo de registro para ver la cantidad de líneas de archivos procesados que ya tiene (congrep
las líneas correctas para mirar ywc -l
las líneas contar), por lo que su información de alto nivel mostrará algo así como "234/76438 archivos procesados";pv /path/to/file | gzip > /path/to/file.gz
Respuestas:
zip
puede comprimir datos a la salida estándar. Por lo tanto, puede combinarlo con otras herramientas comopv
:Elimine una de las
-bep
opciones según su conveniencia.fuente
Si estás de acuerdo con usar 7z:
Esto te dará una barra de progreso como esta:
fuente
He usado con éxito lo siguiente:
Y esto se explica a continuación:
comprima recursivamente en el archivo [target_zip] el [folder_to_zip] redireccionando stderr a stdout. Tenga en cuenta que stderr contendrá una línea para cada archivo y directorio que se procese.
canaliza en pv las líneas con los nombres de los archivos a medida que salen de zip. El pv se opera en modo de línea (el conteo de progreso basado en líneas y tamaño también está en el número de líneas que se esperan; vea la opción de la página man PV -l ).
El tamaño total de las líneas que se esperan se recopila enumerando recursivamente (ls) la [folder_to_zip] y contando las líneas que comienzan con '-' o 'd', es decir, todos los archivos y directorios (recuerde que los directorios se enumeran comenzando con '/') .
Lo anterior proporciona un porcentaje preciso de finalización a medida que se alcanza el 100% cuando se han procesado todos los archivos y directorios.
El problema con la respuesta de pedroapero es que el progreso se calcula sobre el número de bytes procesados (comprimidos) sobre el número total de bytes a procesar (sin comprimir). Como resultado, el proceso se completará en alrededor del 30% (dependiendo de la tasa de compresión).
fuente