Tengo un par de archivos grandes que me gustaría comprimir. Puedo hacer esto con, por ejemplo
tar cvfj big-files.tar.bz2 folder-with-big-files
El problema es que no puedo ver ningún progreso, así que no tengo ni idea de cuánto tiempo llevará ni nada de eso. Utilizando v
al menos puedo ver cuándo se completa cada archivo, pero cuando los archivos son pocos y grandes, esto no es lo más útil.
¿Hay alguna manera de obtener alquitrán para mostrar un progreso más detallado? Como un porcentaje hecho o una barra de progreso o tiempo estimado restante o algo así. Ya sea para cada archivo individual o todos ellos o ambos.
pv $FILE.tgz | tar xzf - -C $DEST_DIR
tar cf - /folder-with-big-files -P | pv -s $[$(du -sk /folder-with-big-files | awk '{print $1}') * 1024] | gzip > big-files.tar.gz
Sin este cambio, estaba obteniendo-bash: syntax error near unexpected token ')'
Puedes usar pv para lograr esto. Para informar el progreso correctamente,
pv
necesita saber cuántos bytes le está lanzando. Entonces, el primer paso es calcular el tamaño (en kbytes). También puede soltar por completo la barra de progreso y simplementepv
decirle cuántos bytes ha visto; informaría un 'hecho tanto y tan rápido'.Y entonces:
fuente
pv
no parece venir con Mac OS X, pero lo probaré una vez que tenga una computadora con MacPorts. ¿Podrías explicar qué estás haciendo allí? No estoy seguro de qué hace exactamente la primera línea.SIZE=$(($SIZE * 1000 / 1024))
- No sé si esto es o no una peculiaridad en mi plataforma en particular, por lo que no lo agrego a la respuesta:du
devuelve el tamaño donde 1 kb = 1024 bytes, mientraspv
parece esperar 1 kb = 1000 bytes (Estoy en Ubuntu 10.04)du
uso de su tamaño de bloque preferido, por ejemplodu -s --block-size=1000
, o simplemente trabajar con bytes simples, por ejemplo, eliminar losk
's de las llamadasdu
ypv
. Sin embargo, esperaría que ambos utilicen a1024
menos que se indique lo contrario, por ejemplo, el--si
interruptor encendidodu
.du -sb
ypv -s
sin ningún modificador). eso debería terminar con toda la confusión.mejor barra de progreso ..
fuente
Consulte las opciones
--checkpoint
y--checkpoint-action
en la página de información de tar (en cuanto a mi distribución, la descripción de estas opciones no está contenida en la página de manual → RTFI).Ver https://www.gnu.org/software/tar/manual/html_section/tar_26.html
Con estos (y tal vez la funcionalidad para escribir su propio comando de punto de control), puede calcular un porcentaje ...
fuente
tar
específico de GNU .Inspirado por la respuesta del ayudante
Otra forma es usar las
tar
opciones nativasel resultado es como
un ejemplo completo aquí
fuente
Usando solo alquitrán
tar
tiene la opción (desde v1.12) para imprimir información de estado en señales usando--totals=$SIGNO
, por ejemplo:La
Total bytes written: [...]
información se imprime en cada señal USR1, por ejemplo:Fuente:
fuente
Acabo de notar el comentario sobre MacOS, y aunque creo que la solución de @akira (y pv) es mucho más ordenada, pensé en perseguir una corazonada y una solución rápida en mi caja de MacOS con alquitrán y enviarle una señal SIGINFO. Curiosamente, funcionó :) si está en un sistema similar a BSD, esto debería funcionar, pero en una caja de Linux, es posible que deba enviar un SIGUSR1, y / o
tar
puede que no funcione de la misma manera.El inconveniente es que solo le proporcionará una salida (en stdout) que le mostrará qué tan lejos está el archivo actual, ya que supongo que no tiene idea de cuán grande es el flujo de datos que está obteniendo.
Entonces, sí, un enfoque alternativo sería disparar alquitrán y enviarle periódicamente SIGINFO cada vez que desee saber qué tan lejos ha llegado. ¿Como hacer esto?
El enfoque manual ad-hoc
Si desea poder verificar el estado de forma ad-hoc, puede presionar
control-T
(como mencionó Brian Swift) en la ventana correspondiente que enviará la señal SIGINFO. Un problema con eso es que lo enviará a toda su cadena, creo, así que si está haciendo:También verá que bzip2 informa su estado junto con tar:
Esto funciona bien si solo desea verificar si
tar
está ejecutando está atascado, o simplemente lento. Probablemente no necesite preocuparse demasiado por los problemas de formato en este caso, ya que es solo una comprobación rápida.El tipo de enfoque automatizado
Si sabe que tomará un tiempo, pero desea algo así como un indicador de progreso, una alternativa sería disparar su proceso de tar y en otro terminal resolver su PID y luego lanzarlo a un script que solo envía una señal repetidamente . Por ejemplo, si tiene el siguiente scriptlet (e invoque como se dice
script.sh PID-to-signal interval-to-signal-at
):Si lo invoca de esta manera, ya que solo está apuntando
tar
, obtendrá un resultado más parecido a estelo cual admito, es un poco bonito.
Por último, pero no menos importante: mi scripting está un poco oxidado, así que si alguien quiere entrar y limpiar / arreglar / mejorar el código, vaya por su vida :)
fuente
tar
en la línea de comando, escribircontrol-T
le enviará un SIGINFO. Si esto fue en una secuencia de comandos que se haría conkill -INFO pid
control-T
, me he acostumbrado claramente con correos no deseados demasiadas ventanas de la consola para mi propio bien ..kill -l
Inspirado por la respuesta de Noah Spurrier
Fuente
fuente
Si conoce el número de archivo en lugar del tamaño total de todos ellos:
Una alternativa (menos precisa pero adecuada) es utilizar la opción -l y enviar en la tubería de Unix los nombres de archivo en lugar del contenido de datos.
Tengamos 12345 archivos en mydir , el comando es:
puede conocer dicho valor de antemano (debido a su caso de uso) o usar algún comando como find + wc para descubrirlo:
fuente
tar cfvz ~/mytarfile.tgz . | pv -s $(find . | wc -l) -l > /dev/null
. ¿Funciona para ti?Método basado en tqdm :
fuente
En macOS , primero asegúrese de tener todos los comandos disponibles e instale los que faltan (por ejemplo
pv
) usando brew .Si solo quieres
tar
sin compresión , ve con:Si quieres comprimir , ve con:
fuente
Aquí hay algunos números de una copia de seguridad prometeus (datos de métrica) en Debian / buster AMD64:
Se canceló este trabajo ya que no había suficiente espacio en disco disponible.
Experimentar con un
zstd
compresor paratar
monitorear el progreso usandopv
:fuente