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.
zipEl 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 10mcomo 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 -qlike -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 zipno 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 (conlsofind -type f) y mientras está comprimiendo, lea el archivo de registro para ver la cantidad de líneas de archivos procesados que ya tiene (congreplas líneas correctas para mirar ywc -llas 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.gzRespuestas:
zippuede comprimir datos a la salida estándar. Por lo tanto, puede combinarlo con otras herramientas comopv:Elimine una de las
-bepopciones 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