pv (barra de progresso) e gzip

10

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
Clark
fonte
1
o que você está tentando alcançar? Você leu documentos pve gzipcomando?
26415 Jakuje

Respostas:

24

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, que você pode obter com algo assim (de qualquer forma, é o primeiro link no google):

pv input_file | gzip > compressed_file

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

Mas você pode fazer o contrário e observar o fluxo de saída, pois aqui você não poderá ver o progresso real, porque pvnão sabe o tamanho real do arquivo compactado:

gzip input_file | pv > compressed_file

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

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
fonte
a barra de progresso não está funcionando #gzip input_file | pv > compressed_file
clarkk 26/12/15
é, mas ele não sabe o tamanho inteiro do arquivo compactado, portanto, apenas digitaliza de um lado para o outro. O primeiro é provavelmente melhor.
27415 Jakuje
A barra de progresso não corre rápido para mim.
Mikezter 03/04
gzip -cé necessário para enviar a saída para stdout para permitir que ele seja passado para pv, caso contrário, a barra de progresso não vai funcionar como não há dados que vão para pv :)
David Gardner
Obrigado pela dica! Você também pode conseguir isso com algo parecido mysqldump ... | gzip | pv > output.sql.gz.
Jevon
4

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

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Arcanjo
fonte
1

Você pode usar 7z para obter um progresso percentual:

$ 7z a spaCy.tar.gz spaCy.tar 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (906E9),ASM,AES-NI)

Open archive: spaCy.tar.gz
--
Path = spaCy.tar.gz
Type = gzip
Headers Size = 20

Scanning the drive:
1 file, 326451200 bytes (312 MiB)

Updating archive: spaCy.tar.gz

Items to compress: 1

 32% U spaCy.tar   
qwr
fonte