pv (barra de progresso) e gzip

8

Por que isso não é possível?

pv ${dest_file} | gzip -1

pv é uma barra de progresso

erro

gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
   0 B 0:00:00 [   0 B/s] [>                                   ]  0%

Isso funciona

pv ${file_in} | tar -Jxf - -C /outdir
    
por clarkk 26.12.2015 / 22:42

2 respostas

17

O que você está tentando alcançar é ver a barra de progresso do processo de compactação. Mas não é possível usar pv . Ele mostra apenas o progresso da transferência, o que você pode conseguir por algo assim (de qualquer maneira, é o primeiro link no google):

pv input_file | gzip > compressed_file

A barra de progresso será executada rapidamente e, em seguida, aguardará a compactação, que não é mais observável usando pv .

Mas você pode fazer isso de outra maneira e observar o fluxo de saída, bot aqui você não será capaz de ver o progresso real, porque pv não sabe o tamanho real do arquivo compactado:

gzip input_file | pv > compressed_file

O melhor que encontrei até agora é o de commandlinefu mesmo com limitação de taxa e compressão de diretórios:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
    
por 26.12.2015 / 23:00
3

Sim, é possível usar as linhas do arquivo, não os bytes. Você obtém uma barra de progresso suficiente:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
    
por 30.08.2017 / 08:51