Resposta rápida : altere a linha para
tar -cf - "${filestobackup[@]}" | pv -s $(du -cb "${filestobackup[@]}" | tail -1 | awk '{print $1}') | gzip > archive.tar.gz
Resposta longa : O problema é que du
produzirá várias linhas de saída e não apenas uma, como no caso de um único diretório. O interruptor -s
faz du
imprimir o tamanho total para cada entrada. Como você está passando várias entradas para du
(duas para a pasta1 e a pasta2, mais uma para cada arquivo .db
na pasta 3), du
imprimirá algo como:
2112345 opt/folder1
57148 opt/folder2
388 opt/folder3/foo.db
161 opt/folder3/bar.db
Ao usar o comutador -c
, du
imprime uma última linha contendo o total geral. Para usar esse valor, você precisa filtrar du
output para obter apenas a última linha.
Isso pode ser feito com o awk, que você já usa no pipe, ou, mais simplesmente, embora com uma penalidade (menor) no desempenho, adicionando um filtro tail -1
.