Backup Tar com barra de progresso

Backup Tar com barra de progresso

Gostaria de adicionar uma barra de progresso ao meu comando tar backup. Eu descobri que obarO shell script deve ser capaz de fazer isso, mas não consigo descobrir o comando correto.

sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz

Com o comando acima consegui exibir algumas informações, mas nenhuma barra de progresso ainda.

Responder1

Desculpe, mas isso não é possível. Do próprio arquivo 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.

O problema é que, para exibir a barra de progresso, baré preciso primeiro saber o tamanho do arquivo.

Paraextraindoum arquivo, não há problema: se backup.tarfor 100 MiBgrande e 50 MiBtiver sido processado até agora, estamos em 50 %.

No entanto, paracriandoum arquivo, barlido em stdin, que é infinito para todos os efeitos práticos. Enquanto odocumentaçãodiz:

Streams infinitos não são legais: a barra só é exibida em 0% e 100%. [...]


A única maneira de exibir barras de progresso para fins de backup que consigo imaginar (além de compilar uma versão personalizada doalcatrão com barra) é:

  1. Calcule o tamanho acumulado dos arquivos /media/data.

  2. Crie backup.tare anexe os arquivos /media/dataum por um.

  3. Após cada arquivo, calcule a porcentagem atual e exiba-a.

  4. gzip backup.tar(vocêpodeusar tarpara isso).

Exemplo:

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

Cuidado:

  • Isso provavelmente retardará o progresso do backup.
  • Os nomes dos arquivos não podem conter caracteres de nova linha.

informação relacionada