pv (Fortschrittsbalken) und gzip

10

Warum ist das nicht möglich?

pv ${dest_file} | gzip -1

pv ist ein Fortschrittsbalken

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%

Das funktioniert

pv ${file_in} | tar -Jxf - -C /outdir
Clarkk
quelle
1
Was versuchst du zu erreichen? Haben Sie do docs of pvund gzipcommand gelesen ?
Jakuje

Antworten:

23

Was Sie erreichen möchten, ist die Anzeige des Fortschrittsbalkens des Komprimierungsprozesses. Aber es ist nicht möglich mit pv. Es zeigt nur den Übertragungsfortschritt an, den Sie mit so etwas erreichen können (es ist sowieso der erste Link in Google):

pv input_file | gzip > compressed_file

Der Fortschrittsbalken wird schnell ausgeführt und wartet dann auf die Komprimierung, die mit nicht mehr beobachtet werden kann pv.

Sie können dies aber auch anders herum tun und den Ausgabestream ansehen. Hier können Sie den tatsächlichen Fortschritt nicht sehen, da Sie pvdie tatsächliche Größe der komprimierten Datei nicht kennen:

gzip input_file | pv > compressed_file

Das Beste, was ich bisher gefunden habe, ist das von commandlinefu, selbst bei Ratenbegrenzung und Komprimierung von Verzeichnissen:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
quelle
Der Fortschrittsbalken funktioniert nicht mitgzip input_file | pv > compressed_file
Clarkk
es ist, aber es kennt nicht die gesamte Größe der komprimierten Datei, so dass es nur von einer Seite zur anderen scannt. Der erste ist wahrscheinlich besser.
Jakuje
Der Fortschrittsbalken läuft für mich nicht schnell.
Mikezter
gzip -cist erforderlich, um die Ausgabe an stdout zu senden, damit sie weitergeleitet werden kann pv, andernfalls funktioniert der Fortschrittsbalken nicht, da keine Daten an pv :)
David Gardner
Danke für den Tipp! Sie können dies auch mit so etwas erreichen mysqldump ... | gzip | pv > output.sql.gz.
Jevon
4

Ja, es ist irgendwie möglich, die Zeilen der Datei zu verwenden, nicht die Bytes. Sie erhalten einen ausreichend genauen Fortschrittsbalken:

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

Sie können stattdessen 7z verwenden, um einen prozentualen Fortschritt zu erhalten:

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