Wenn eine Datei komprimiert ist, können Sie sie schnell abfragen, um die Größe der nicht komprimierten Datei zu bestimmen (ohne sie zu dekomprimieren), insbesondere in Fällen, in denen die Größe der nicht komprimierten Datei> 4 GB ist.
Laut dem RFC https://tools.ietf.org/html/rfc1952#page-5 können Sie die letzten 4 Bytes der Datei abfragen, aber wenn die unkomprimierte Datei> 4 GB war, dann stellt der Wert nur das daruncompressed value modulo 2^32
Dieser Wert kann auch durch Ausführen gunzip -l foo.gz
des Befehls abgerufen werden. Die Spalte "unkomprimiert" enthält jedoch nur einen neuen Wert uncompressed value modulo 2^32
, vermutlich, wenn die Fußzeile wie oben beschrieben gelesen wird.
Ich habe mich nur gefragt, ob es eine Möglichkeit gibt, die unkomprimierte Dateigröße zu ermitteln, ohne sie zuerst dekomprimieren zu müssen. Dies ist besonders nützlich, wenn komprimierte Dateien mehr als 50 GB Daten enthalten und die Dekomprimierung mit Methoden wie gzcat foo.gz | wc -c
BEARBEITEN: Die Beschränkung von 4 GB wird auf der man
Seite des in gzip
OSX ( Apple gzip 242
) enthaltenen Dienstprogramms offen anerkannt.
BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
integer, therefore, it can not represent files larger than 4GB. This
limitation also applies to -l option of gzip utility.
quelle
gzip
muss älter sein als viele Benutzer in dieser Community!gzip
Ich wäre überrascht, wenn hier viele 23-Jährige herumlaufen würden. Ich bin sicher, dass es einige gibt, aber nach dem, was ich sagen kann, liegt das Durchschnittsalter zwischen 30 und 35 Jahren.xz
die diese Einschränkung nicht hat. GNU wechselt zuxz
.xz
Fall so aus, als würde dieses Problem gelöst.Antworten:
Ich glaube, der schnellste Weg ist zu ändern,
gzip
so dass das Testen im ausführlichen Modus die Anzahl der dekomprimierten Bytes ausgibt; Auf meinem System erhalte ich mit einer 7761108684-Byte-DateiUm gzip (1.6, wie in Debian verfügbar) zu ändern, ist der Patch wie folgt:
quelle
-t
es diesbezüglich bereits optimiert? Die Verbesserung ist klein genug, um den Eindruck zu erwecken, dass Sie nur die Ausgabezeit gespart haben.gzip
. Ich starte nurgzip
die komprimierten Dateien, die nicht erneut komprimiert werden, sondern nur überprüft werden. (Der Patch ist ein schneller und unsauberer Proof-of-Concept, für die Arbeit sind noch einige Änderungen erforderlichgunzip
.)FCOMMENT
Feld einzubetten . Auf diese Weise können Benutzer einen Byte-Bereich abfragen, um diese Daten abzurufen. Dies wäre in meinem Fall nützlich, insbesondere für Artikel, die in Amazon S3Wenn Sie die Größe einer komprimierten Datei oder Gruppe von Dateien benötigen, die beste Wahl zu verwenden ist
tar -z
odertar -j
stattgzip
wietar
beinhaltet die unkomprimierte Dateien Größe. Hier können Sielesspipe
die Liste der Dateien einsehen:Wenn
less
konfiguriert ist zu verwendenlesspipe
:Bedenken Sie jedoch, dass dies sehr lange dauern kann. Ihr System reagiert jedoch weiterhin, sodass Sie den Dekomprimierungsprozess beenden können.
Ein anderer Ansatz wäre, das komprimierte Verhältnis zu protokollieren und stattdessen diese [Text] -Datei abzufragen:
Es ist jedoch eine Berechnung erforderlich, um die tatsächliche Dateigröße zu ermitteln.
Sie können auch das Gleiche tun
tar
, was ich auch mit großen Backups mache, da dies verhindert, dass der gesamte Dekomprimierungsprozess ausgeführt wird, um beispielsweise nur eine Dateigröße oder einen Dateinamen zu erhalten.quelle
tar
Sie die ursprüngliche Dateigröße im Archiv protokolliert. Ich bin mir nicht sicherzip
, ob ich mich anders verhalte.wc -c
Befehl ausführen.Wie wäre es mit
quelle
Dies dauert sehr lange, gibt Ihnen jedoch die endgültige Größe in Byte.
quelle