pv (barra de progreso) y gzip

10

¿Por qué esto no es posible?

pv ${dest_file} | gzip -1

pv es una barra de progreso

error

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%

Esto funciona

pv ${file_in} | tar -Jxf - -C /outdir
clarkk
fuente
1
¿Qué estás intentando lograr? ¿Leíste docs of pvand gzipcommand?
Jakuje

Respuestas:

24

Lo que intenta lograr es ver la barra de progreso del proceso de compresión. Pero no es posible usarlo pv. Solo muestra el progreso de la transferencia, que puede lograr con algo como esto (de todos modos, es el primer enlace en Google):

pv input_file | gzip > compressed_file

La barra de progreso se ejecutará rápidamente y luego esperará la compresión, que ya no se puede usar pv.

Pero puede hacerlo al revés y ver la secuencia de salida, pero aquí no podrá ver el progreso real, porque pvno conoce el tamaño real del archivo comprimido:

gzip input_file | pv > compressed_file

Lo mejor que he encontrado hasta ahora es el de commandlinefu incluso con limitación de velocidad y compresión de directorios:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
fuente
la barra de progreso no funcionagzip input_file | pv > compressed_file
clarkk
lo es, pero no conoce el tamaño completo del archivo comprimido, por lo que solo escanea de lado a lado. El primero es probablemente mejor.
Jakuje
La barra de progreso no funciona rápido para mí.
mikezter
gzip -ces necesario enviar la salida a stdout para permitir que se pase pv, de lo contrario, la barra de progreso no funcionará ya que no hay datos que vayan pv :)
David Gardner
¡Gracias por el consejo! También puedes lograr esto con algo como mysqldump ... | gzip | pv > output.sql.gz.
jevon
4

Sí, es posible usar las líneas del archivo, no los bytes. Obtiene una barra de progreso lo suficientemente precisa:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Arcángel
fuente
1

En su lugar, puede usar 7z para obtener un porcentaje de progreso:

$ 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
fuente