Wie kann ich die unkomprimierte Größe der gzip-Datei erhalten, ohne sie tatsächlich zu dekomprimieren?

25906
user238010

Finden Sie meine OS-Details:

$ uname -a AIX xxyy 1 6 000145364C00 

Ich habe den folgenden Befehl ausprobiert, um die Größe einer Datei im gzip-Archiv abzurufen:

$ gzip -l mycontent.DAT.Gz compressed uncompr. ratio uncompressed_name -1223644243 1751372002 -75.3% mycontent.DAT.Gz 

Nicht sicher, wie man die entpackte Größe hieraus interpretiert. Komprimierte Dateigröße nahe 4 GB.

Also habe ich diese Option ausprobiert, um korrekte Daten zu erfassen:

$ zcat mycontent.DAT.Gz | wc -c 

Es gibt mir diesen Fehler:

mycontent.DAT.Gz.Z:A file or directory in the path name does not exist. 0 

Können Sie mir bitte sagen, wie Sie diesen Wert aus einem Shell-Skript erfassen können, ohne die Quelldatei zu dekomprimieren?

17
Sind Sie sich über die Integrität des Archivs sicher? Es meldet seine eigene komprimierte Größe als ~ 1,7 G. Wenn es wirklich ~ 4 GB ist, würde ich vermuten, dass es ein Problem gibt. terdon vor 10 Jahren 0

4 Antworten auf die Frage

15
Volker Siegel

Um den Fragetitel zu beantworten:

Wie kann ich die unkomprimierte Größe der gzip-Datei erhalten, ohne sie tatsächlich zu dekomprimieren?

Wie Sie offensichtlich wissen, zeigt die Option -l( --list) normalerweise die unkomprimierte Größe.
Was angezeigt wird, wird nicht aus den Daten berechnet, sondern als Teil der komprimierten Datei im Header gespeichert.

In Ihrem Fall -lfunktioniert die Option aus irgendeinem Grund nicht.
Es ist jedoch nicht möglich, die unkomprimierte Größe aus den rohen komprimierten Daten zu "messen" - es gibt einfach keine Informationen zu etwas anderem in den komprimierten Daten - was nicht verwunderlich ist, da der Punkt der Komprimierung darin besteht, alles, was nicht benötigt wird, wegzulassen.

Sie müssen die unkomprimierten Daten nicht auf der Festplatte speichern: zcat file.gz | wc -cIst der richtige Ansatz - aber wie @OleTange geantwortet hat, zcatscheint Ihr nicht derjenige von zu sein gzip.
Die Alternative ist die Verwendung der gzipOptionen -d( --decompress) und-c ( --to-stdout), kombiniert mit wcOption -c( --bytes):

gzip -dc file.gz | wc -c 
Die `-l`-Option hat einen Fehler für Dateien, die größer als 4 GB sind: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775 Flimm vor 8 Jahren 8
5
Ole Tange

Sie zcatist nicht GNU zcat sondern von compress. Versuchen:

gzcat mycontent.DAT.Gz | wc -c gzip -dc mycontent.DAT.Gz | wc -c 
Dadurch wird die Quelldatei dekomprimiert. Vielleicht ist es das, was das OP will, aber das ist nicht die Antwort auf die Frage. Marco vor 10 Jahren 0
Ah, das erklärt, warum nach einer Datei gesucht wurde, die auf .Z endet Hennes vor 8 Jahren 0
1
grosser

gzip -l hat bei mir nicht funktioniert, nur git -1 ... aber das tat:

unzip -l file.zip 
0
RaZieRSarE

Ich finde alles Websites im Web und löse dieses Problem nicht. Die Größe der Datei ist größer als 4 GB.

Meine Lösung ist folgende :

 [oracle @ base tmp] $ timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz -rw-r - r-- oracle / oinstall 111828 2018-03-03 03:05 oracle.20180303.030001.log -rw-r ----- oracle / oinstall 6666911744 2018-03-03 03:05 oracle.20180303.030001.dmp 

für die Gesamtgröße aus der GZ-Datei:

[oracle @ base tmp] $ echo $ (timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '') | grep -o '[[: digit:]] *' | awk ' END ' 6667023572 
Dies wäre eine bessere Antwort, wenn Sie erklärt haben, dass dies nur für Tarballs funktioniert und Sie es bereinigt haben (Timeout ist nicht erforderlich und auch nicht grep). kbolino vor 5 Jahren 0