Einige Komprimierungsprogramme können Informationen anzeigen (wie Komprimierungsverhältnis oder Zeit- und Größensummen), während sie die Aufgabe ausführen, wie z. B. xz -v
:
--- % 2,580.2 KiB / 6,552.0 KiB = 0.394 1.2 MiB/s 0:05
Beim Komprimieren einer großen Datei würde ich gerne das Komprimierungsverhältnis mitten in der Aufgabe wissen, damit ich den Prozess stoppen kann, wenn das Komprimierungsverhältnis niedrig ist, und es unkomprimiert lassen.
Gibt es andere Programme mit dieser Funktion? (xz
hat eine hohe Komprimierungsrate, ist aber langsam)
Akzeptierte Antwort:
Der generische Weg, dies zu tun, ist etwas wie pv
zu verwenden um sowohl die Eingabe- als auch die Ausgabegröße des Komprimierungsprogramms zu überwachen. Zum Beispiel:
$ 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] [ <=> ]
Oben ist leicht zu erkennen, dass die Ausgabegröße gleich der Eingabegröße ist – wie erwartet, wenn man versucht, Zufallsdaten zu komprimieren.
Wenn wir stattdessen eine Datei ausprobieren, die wirklich gut komprimiert:
$ 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] [ <=> ]
Die Ausgabegröße beträgt 2,62 MiB, die Eingabe 2,65 GiB – 3 Größenordnungen größer.
Als Nebeneffekt, wenn es auf einer normalen Datei verwendet wird, pv
gibt Ihnen eine voraussichtliche Ankunftszeit:
$ 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
Das Jessie-DVD-Image besteht hauptsächlich aus komprimierten Dateien, daher lässt es sich nicht so gut komprimieren, aber es würde weitere zweieinhalb Minuten dauern, bis es fertig ist.
Sie können auch pv -d
verwenden um einen bereits laufenden Prozess zu überwachen – wenn Sie das auf einen laufenden Kompressor anwenden, wird es Ihnen sagen, wo es sich in der Eingabe- vs. Ausgabedatei befindet, wodurch Sie wiederum schnell das Verhältnis sehen können:
$ 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] [ <=> ]
Tar-Dateien von MP3s lassen sich auch nicht gut komprimieren.
Hinweis: Viele Kompressoren arbeiten blockweise. Aus diesem Grund sehen Sie möglicherweise Dinge wie die Übertragungsrate, die dann 0 beträgt, wiederholen Sie dies. Sie müssen den Kompressor eine Weile laufen lassen, bevor Sie eine wirkliche Vorstellung von dem erwarteten Verhältnis bekommen. Denken Sie daran, dass es direkt nach einer Spitze wahrscheinlich in einem Block gelesen, aber noch nicht in der komprimierten Version geschrieben wurde – aber wenn Sie bereits 10 Blöcke gewartet haben, ist das höchstens ein Fehler von 10 %.
Verwandte:Was macht ein Programm, wenn es ein SIGKILL-Signal sendet?
(Die von mir verwendeten pv-Optionen:-p
um den Fortschrittsbalken einzuschalten; -t
um die verstrichene Zeit einzuschalten; -e
um die ETA einzuschalten; -r
um die Übertragungsrate anzuzeigen; -b
um den Bytezähler einzuschalten; -c
um mehrere pv
zu machen s in einer Rohrleitung; -N
um die Labels festzulegen).