Gibt es eine Möglichkeit zu überprüfen, wie stark eine Datei komprimiert werden kann, ohne sie tatsächlich zu komprimieren?

387
mydoghasworms

Ich habe eine große (80 GB) virtuelle Laufwerksdatei, die ich komprimieren möchte, aber bevor ich dies tue, möchte ich sehen, wie komprimierbar sie tatsächlich ist, bevor ich eine weitere (möglicherweise) große Datei erstellt (wenn sich herausstellt, dass die Daten dies nicht können viel komprimiert werden).

Gibt es eine Möglichkeit, dies zu tun? dh Analyse eines vorhandenen Datensatzes, um zu sehen, ob viel Komprimierungsspielraum vorhanden ist, ohne tatsächlich eine Ausgabedatei zu schreiben?

0
"ohne tatsächlich komprimieren" bedeutet "ohne eine Datei zu erstellen" oder "ohne CPU-Zyklen zu beanspruchen"? Kamil Maciorowski vor 5 Jahren 0
Ja, ohne eine Datei zu erstellen. Habe die Frage geklärt, danke für den Kommentar. mydoghasworms vor 5 Jahren 0
Hinweis (zu Ihrer ursprünglichen Frage): `tar` wird nicht komprimiert. Kamil Maciorowski vor 5 Jahren 0
Oh ja, entschuldige mydoghasworms vor 5 Jahren 0

1 Antwort auf die Frage

4
Kamil Maciorowski

Jedes Komprimierungswerkzeug, das in stdout schreiben kann, kann verwendet werden. Pfeife es einfach an wc -c. Beispiel:

gzip -c -9 < bigfile | wc -c 

Beachten Sie, dass das Tool seine Aufgabe erfüllt und Ihre CPU unabhängig von der Ausgabe belastet.

Ich würde `pv bigfile | hinzufügen gzip | wc -c` oder sogar `pv -cN raw bigfile | gzip | pv -cN gezippt | wc -c`, wenn Sie eine Fortschrittsausgabe wünschen. grawity vor 5 Jahren 2
Es gibt also keine Möglichkeit, die zu komprimierenden Daten einfach zu analysieren, um zu sehen, um wie viel sie komprimiert würden, ohne sie tatsächlich zu komprimieren, oder? Denn wenn ich richtig verstehe, was hier vor sich geht (weil ich es vielleicht nicht bin), werden die Daten tatsächlich komprimiert, um herauszufinden, wie groß das Ergebnis ist. mydoghasworms vor 5 Jahren 0
@ mydoghasworms Ich denke, einige Heuristiken, die in einigen Fällen funktionieren, sind möglich. aber ich kann nicht sagen, dass ich ein Werkzeug gesehen habe, das auf diese Weise funktioniert. Kamil Maciorowski vor 5 Jahren 0
Danke, in diesem Fall werde ich Ihre Antwort akzeptieren. Ich habe den Prozess mit der Empfehlung von @grawity gestartet, pv für die Fortschrittsausgabe zu verwenden. Es dauert immer noch mehr als eine halbe Stunde, um herauszufinden, wie viel diese 80 GB-Datei komprimiert werden kann. In Bezug auf Zeit und Energiekosten gegenüber Speicherkosten lohnt es sich wahrscheinlich mehr, die Datei zu kopieren, als sie ist :-) Es ist sowieso eine interessante Übung, also danke für die Antwort! mydoghasworms vor 5 Jahren 0
@ grawity Gibt es eine Möglichkeit, ein laufendes Update von "wc" zu erstellen, um Ihnen mitzuteilen, wie groß das Ergebnis ist, solange es läuft? (Ich gehe vielleicht falsch davon aus, dass die Prozessergebnisse durch die Pipe gestreamt werden - anstatt zu warten, bis die vorhergehende Aufgabe abgeschlossen ist -, aber bis jetzt habe ich keinen Anstieg der Speicherauslastung bemerkt). mydoghasworms vor 5 Jahren 0
@ mydoghasworms Dafür gibt es das zweite "pv". Kamil Maciorowski vor 5 Jahren 1
Ach, egal, die Antwort war auf der Kommandozeile und starrte mir ins Gesicht! mydoghasworms vor 5 Jahren 0
Danke, sorry, habe das erst jetzt bemerkt! Ich schaute nur auf die Bar und bemerkte die Größe nicht. mydoghasworms vor 5 Jahren 0