A maneira genérica de fazer isso é usar algo como pv
para monitorar o tamanho de entrada e saída do programa de compactação. Por exemplo:
$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null
out: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
in: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
É fácil perceber que o tamanho da saída é o mesmo do tamanho da entrada - como esperado ao tentar compactar dados aleatórios.
Se em vez disso, tentarmos em um arquivo que comprima muito bem:
$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null
out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [ <=> ]
in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [ <=> ]
O tamanho da saída é 2,62MiB, a entrada é 2,65GiB - 3 ordens de magnitude maiores.
Como benefício secundário, se usado em um arquivo normal, pv
fornecerá um ETA:
$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null
out: 578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [ <=> ]
in: 595MiB 0:00:27 [22.1MiB/s] [ 22MiB/s] [==> ] 15% ETA 0:02:25
A imagem do DVD do Jessie é composta principalmente por arquivos compactados, portanto, ela não é comprimida tão bem, mas levaria mais dois minutos e meio para ser concluída.
Você também pode usar pv -d
para monitorar um processo já em execução - se você aplicar isso a um compressor em execução, ele lhe dirá onde está o arquivo de entrada versus o arquivo de saída, novamente permitindo ver rapidamente a proporção :
$ pv -pterba -d "$(pidof gzip)"
3:/var/tmp/mp3s.tar: 911MiB 0:00:44 [ 20MiB/s] [19.9MiB/s] [> ] 9% ETA 0:07:35
4:/var/tmp/mp3s.tar.gz: 906MiB 0:00:44 [ 20MiB/s] [19.8MiB/s] [ <=> ]
Arquivos tar de MP3s também não compactam bem.
Nota: Muitos compressores funcionam em bloco por bloco. É por isso que você pode ver coisas como a taxa de transferência aumentando, sendo 0, repita. Você precisa deixar o compressor funcionar um pouco antes de obter uma idéia real da relação esperada. Tenha em mente que, logo após um pico, é provavelmente lido em um bloco, mas ainda não foi escrito a versão compactada - mas se você já esperou por 10 blocos, é no máximo 10% de erro.
(As opções pv que estou usando: -p
para ativar a barra de progresso; -t
para ativar o tempo decorrido; -e
para ativar o ETA; -r
para mostrar a taxa de transferência; -b
para ativar o contador de bytes; -c
para fazer vários pv
s em um trabalho de canal; -N
para definir os rótulos).