Come posso ottenere la dimensione non compressa del file gzip senza decomprimerlo effettivamente?


25

Si prega di trovare i dettagli del mio sistema operativo:

$ uname -a
AIX xxyy 1 6 000145364C00

Ho provato il seguente comando per ottenere la dimensione di un file nell'archivio gzip:

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

Non sono sicuro di come interpretare la dimensione decompressa da questo. Dimensione del file compresso vicino a 4 GB.

Quindi, ho provato questa opzione per acquisire dati corretti:

$ zcat mycontent.DAT.Gz | wc -c

Mi dà questo errore:

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

Potete per favore dirmi come acquisire questo valore dallo script della shell senza decomprimere il file sorgente?


Sei sicuro dell'integrità dell'archivio? Riporta le sue dimensioni compresse come ~ 1,7G. Se è davvero ~ 4 GB immagino che ci sia un problema.
terdon,

Risposte:


26

Per rispondere al titolo della domanda:

Come posso ottenere la dimensione non compressa del file gzip senza decomprimerlo effettivamente?

Come ovviamente saprai, l'opzione -l( --list) di solito mostra le dimensioni non compresse.
Ciò che mostra non viene calcolato dai dati, ma è stato memorizzato nell'intestazione come parte del file compresso.

Nel tuo caso, l' -lopzione non funziona per qualche motivo.
Ma non è possibile 'misurare' la dimensione non compressa dai dati compressi non elaborati - non ci sono semplicemente informazioni su nient'altro nei dati compressi - il che non sorprende, poiché il punto di compressione è lasciare fuori tutto ciò che non è necessario.

Non è necessario archiviare i dati non compressi sul disco: zcat file.gz | wc -cè l'approccio giusto - ma come ha risposto @OleTange, il tuo zcatsembra non essere quello di gzip.
L'alternativa sta usando le gzipopzioni -d( --decompress) e -c( --to-stdout), combinate con wcoption -c( --bytes):

gzip -dc file.gz | wc -c

13
L' -lopzione ha un bug per file di dimensioni superiori a 4 GB: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm

6

Il tuo zcatnon è GNU zcat ma da compress. Provare:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c

Questo decomprime il file di origine. Forse è quello che vuole l'OP, ma questa non è la risposta alla domanda.
Marco,

Ah, questo spiega perché stava cercando un file che termina in .Z
Hennes,

0

gzip -l non ha funzionato per me, basta git -1 ... ma questo ha fatto:

unzip -l file.zip

0

Sto trovando tutti i siti Web e non risolvo questo problema quando si ottiene una dimensione del file maggiore di 4 GB.

la mia soluzione è questa :

[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

per ottenere la dimensione totale dal file gz:

[oracle @ base tmp] $ echo $ (timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit:]] *' | awk '{sum + = $ 1} END {print sum}'
    6667023572

1
Questa sarebbe una risposta migliore se spiegassi che funziona solo con i tarball e l'hai ripulita (il timeout non è necessario e nemmeno Grep).
kbolino,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.