2012-11-09 10 views
7

Sto provando a comprimere il contenuto di una cartella che contiene 4 file di grandi dimensioni, molto, molto simili. Quindi mi aspetto che le dimensioni siano ridotte.zip sgonfiato 0%? Perché nessuna compressione?

Ecco il comando che sto usando su Linux/Fedora:

zip -9 myarchive.zip -r myfolder -P mypassword 

ho la risposta:

adding: myfolder/ (stored 0%) 
adding: myfolder/Program1.exe (deflated 0%) 
adding: myfolder/Program2.exe (deflated 0%) 
adding: myfolder/Program3.exe (deflated 0%) 
adding: myfolder/Program4.exe (deflated 0%) 

Allora ottengo l'archivio, che è circa la stessa dimensione come il mio originale cartella.

Sembra che non si sia verificata alcuna compressione. Perché?

+0

Cosa succede quando ometti '-P mypassword'? –

+2

Non tutti i dati potrebbero essere compressi. –

+0

è lo stesso quando ometto -P mypassword. –

risposta

7

differenza tar + gzip, zip utilizza una nuova tabella di compressione per ogni file, quindi, anche se i quattro file erano identici, che avrebbe cercato di comprimere ciascuno individualmente.

Tecnicamente, tar vede anche ogni file ma li stringhe insieme in un ingresso lungo per gzip, quindi la fase di compressione lavora su un ingresso enorme ed è per questo tar + gzip di solito produce un risultato più piccolo di zip.

La domanda è perché i tuoi file exe non possono essere compressi. I file exe di solito contengono grandi quantità di dati facilmente comprimibili, quindi dovrebbero ridursi ("sgonfiare") almeno del 30%. Forse i file sono crittografati o offuscati; questi processi rendono il risultato difficile da comprimere.

+0

Grazie, ha senso quindi, se zip comprime individualmente ogni file. I file sono exe autoestrabili, contengono un piccolo file eseguibile + una grande libreria zippata di file dll + alcune immagini. Le immagini e le librerie sono già compresse e sono quasi le stesse per ogni file. –

2

Alcuni file non possono essere compressi, in particolare se la loro entropia è elevata. Ciò accade quando la distribuzione statistica dei byte è pari (ad esempio quando il byte 0 appare tanto spesso quanto il byte 1 come byte 2 ...). Questo succede per contenuti già compressi. Alcuni formati video o audio rientrano in quella categoria.

+0

Penso che ogni file abbia un'alta entropia, ma sono molto simili. Probabilmente c'è meno dell'1% di differenza tra due file dati. Quindi c'è molta ridondanza quando si considera l'intera cartella. –

+0

E cosa significa "sgonfiato 0%"? Ho dimenticato di chiederlo nel post originale. Grazie per l'aiuto. –

2

Aaron è corretto. Secondo Wikipedia, il formato ZIP si comprime prima dell'archiviazione, quindi le somiglianze tra file diversi non aiutano la compressione.

Stai davvero provando a comprimere i file .exe? In qualche modo dubito che sia il tuo tipo di file vero e proprio.

Vedere http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages.

+0

Grazie per l'input e per il collegamento. Sì, i miei file sono file exe autoestrabili (vedi la mia risposta ad Aaron). Grazie per il tuo tempo! –

2

Lo 0% sgonfiato significa che ha provato a comprimere, ma non ha effettivamente ottenuto alcuna compressione. Come notato, il formato zip non può sfruttare la somiglianza tra voci diverse. tar + gzip can, ma anche in questo caso solo se le somiglianze finiscono a meno di 32K byte di distanza l'una dall'altra. Altri formati possono sfruttare le somiglianze a più lunga distanza, come xz.

È normale che gli eseguibili non compressi comprimano dal 30% al 50%, il che significa che i file eseguibili sono a) compressi da qualcosa come UPX, b) sono dati compressi autoestraenti, in cui il decompressore viene memorizzato in anticipo dei dati compressi, c) sono eseguibili molto brevi con molti dati compressi o d) sono per lo più crittografati.

Problemi correlati