
Me gustaría agregar una barra de progreso a mi comando de copia de seguridad tar. Descubrí que elbarEl script de shell debería poder hacer esto, pero no puedo encontrar el comando correcto.
sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz
Con el comando anterior pude mostrar cierta información, pero aún no hay barra de progreso.
Respuesta1
Lo sentimos, pero esto no es posible. Del propio archivo bar
:
Synopsis:
'bar' works just like 'cat', but shows a progress bar in ASCII art on stderr.
The script's main function is meant to be usable in any Bourne shell to be
suitable for install scripts without the need for any additional tool.
El problema es que, para mostrar la barra de progreso, bar
primero hay que conocer el tamaño del archivo.
Paraextrayendoun archivo, no hay problema: si backup.tar
es 100 MiB
grande y 50 MiB
ya se ha procesado, estamos en 50 %
.
Sin embargo, paracreandoun archivo, bar
lee desde stdin
, que es infinito para todos los propósitos prácticos. como eldocumentacióndice:
Las transmisiones infinitas no son agradables: la barra solo se muestra al 0% y al 100%. [...]
La única forma que se me ocurre de mostrar barras de progreso para fines de copia de seguridad (además de compilar una versión personalizada dealquitrán con barra) es:
Calcula el tamaño acumulado de los archivos
/media/data
.Cree
backup.tar
y agregue los archivos/media/data
uno por uno.Después de cada archivo, calcule el porcentaje actual y muéstrelo.
gzip
backup.tar
(túpoderutilizartar
para esto).
Ejemplo:
TOTAL=$(du -b /media/data | grep -oP "^\d+")
CURRENT=0
echo "Archiving:"
IFS="
"
for FILE in $(find /media/data -type f); do
tar rf backup.tar $FILE
CURRENT=$(($CURRENT+$(du -b $FILE | grep -oP "^\d+")))
echo -en "\r"$((100*($CURRENT-1)/$TOTAL+1))"%"
done
echo
echo "Compressing:"
bar backup.tar | gzip > backup.tar.gz
rm backup.tar
Precaución:
- Probablemente esto ralentizará el progreso de la copia de seguridad.
- Los nombres de archivos no pueden contener caracteres de nueva línea.