Backup de alcatrão com barra de progresso

3

Eu gostaria de adicionar uma barra de progresso ao meu comando de backup tar. Descobri que o script de shell bar deveria ser capaz de fazer isso, mas não consigo descobrir o correto comando.

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

Com o comando acima, consegui exibir algumas informações, mas ainda não há barra de progresso.

    
por Jens 25.05.2012 / 03:10

1 resposta

3

Desculpe, mas isso não é possível. Do arquivo bar em si:

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 precisa conhecer o tamanho do arquivo primeiro.

Para extrair uma tentativa, isso não é problema: se backup.tar for 100 MiB big e 50 MiB tiverem sido processados até agora, estaremos em 50 % .

No entanto, para criar uma tentativa, bar lê a partir de stdin , que é infinita para todos os fins práticos. Como a documentação diz:

Infinite streams are not nice: the bar is only displayed at 0% and at 100%. [...]

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

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

  2. Crie backup.tar e anexe os arquivos de /media/data , um por um.

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

  4. gzip backup.tar (você pode usar tar para 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 reduzirá o progresso do backup.
  • Nomes de arquivo não podem conter caracteres de nova linha.
por 25.05.2012 / 03:39