Copia de seguridad de tar con barra de progreso

Copia de seguridad de tar con barra de progreso

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, barprimero hay que conocer el tamaño del archivo.

Paraextrayendoun archivo, no hay problema: si backup.tares 100 MiBgrande y 50 MiBya se ha procesado, estamos en 50 %.

Sin embargo, paracreandoun archivo, barlee 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:

  1. Calcula el tamaño acumulado de los archivos /media/data.

  2. Cree backup.tary agregue los archivos /media/datauno por uno.

  3. Después de cada archivo, calcule el porcentaje actual y muéstrelo.

  4. gzip backup.tar(túpoderutilizar tarpara 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.

información relacionada