Come fare "File da archiviare senza compressione" in 7-zip?


25

Esiste un modo per impedire selettivamente determinati tipi di file dalla compressione in 7-zip, come in WinRAR?

Sto cercando di comprimere una cartella enorme (molti gigabyte) e non voglio che i file già compressi (ad esempio i file ZIP) vengano ricompressi: dovrebbero essere archiviati senza compressione.


C'è un motivo specifico (risparmiando ogni piccolo tempo di elaborazione possibile, leggendoli senza dover raggruppare il binario 7z o reimplementare LZMA, ecc.) Che vuoi fare? In generale, la maggior parte degli strumenti di compressione che ho incontrato tendono ad essere abbastanza intelligenti da archiviare automaticamente le cose non compresse se trovano un file che risponde male al tentativo di comprimerlo ulteriormente.
ssokolow,

@ssokolow: Sono passati 4 anni e immagino di non aver mai risposto alla tua domanda, ma ci possono essere altri motivi come minimizzare i danni causati dalla corruzione e rendere più semplice il recupero dei dati in caso di catastrofe.
Mehrdad,

Risposte:


19

Sì, è possibile avere metodi di compressione diversi per file diversi all'interno dello stesso archivio 7-Zip.

Utilizzare la versione della riga di comando di 7-Zip con il -mparametro per specificare il metodo as Copy, il che significa nessuna compressione.

Esempio :

7za a -m0=Copy tmp7.7z *.txt

Per ulteriori informazioni, vedere l' opzione -m (Imposta metodo di compressione) .


Il comando sopra non comprime i file txt e aggiunge solo i file txt a un archivio esistente. Prima di eseguire il comando precedente, è necessario creare un file di archivio con i file non txt. Non è così semplice se ci sono n diversi tipi di file.
Praveen Sripati,

Se -m0=Copynon funziona, prova -mx=0.
Bora M. Alper,

15

Supponiamo che tu abbia file zip e che tu abbia file txt non compressi nella tua cartella.

Il primo passo è creare un archivio comprimendo i file txt usando il seguente comando.

puoi usare -m per impostare i livelli di compressione, questo dipende anche dal metodo di compressione che stai usando

Supponiamo che qui sia solo la compressione predefinita

7z a compressed.7z *.txt -r 

Verrai compresso.7z ora.

Il secondo passo sarà copiare il file già compresso in questo archivio o creare un nuovo archivio

7z u compressed.7z -u!update.7z -mx0 *.zip 

C'è ulteriore elaborazione del comando di aggiornamento qui

E se hai la libertà di usare l'interfaccia grafica, l'aggiornamento può essere fatto nel modo seguente

inserisci qui la descrizione dell'immagine


Un po 'una seccatura ma credo che avrebbe funzionato, grazie.
Mehrdad,

1

Ho creato uno script PowerShell che comprime rapidamente una directory memorizzando i tipi di file che sono già compressi (come i file .zip) senza provare a ricomprimerli. Utilizza l'interfaccia della riga di comando di 7zip e utilizza le estensioni dei nomi per decidere se comprimere o semplicemente archiviare un determinato file.

Puoi trovare lo script qui: https://gist.github.com/ivanatpr/5dea086172eab573ba71


0

Tecnicamente, i file compressi non si comprimono ulteriormente, qualcosa su un limite di entropia o simili, dimentico i dettagli, ma il massimo che potresti mai ottenere è inferiore al 2% che ho visto.

La maggior parte dei buoni compressori controlla la compressione e memorizza semplicemente i file non comprimibili poiché la compressione quindi aggiungerebbe overhead e aumenterebbe le dimensioni.

Naturalmente, c'è il lavoro e il tempo di guardare il file in primo luogo.

Come discusso in altre risposte, eseguire più passaggi sul set di file sarà probabilmente la soluzione migliore ed è facilmente gestibile tramite script.

Crea l'archivio 7z e aggiungi tutto, MA i file compressi in un unico passaggio, quindi aggiungi i file precompressi come dati non compressi. (Lo farei in questo modo poiché le cose comprimibili sarebbero quindi all'inizio dell'archivio e quelle non comprimibili alla fine. Streaming in streaming più veloce poiché contiguo)

(usato 'comprimi ...' troppo!)


1
Nel caso in cui aiuti qualcuno, ecco l'essenza di "qualcosa su un limite di entropia o simile". L'entropia può essere pensata come una misura di imprevedibilità. L'idea alla base della compressione è che, se è possibile prevedere un modello di bit, non è necessario archiviare il tutto ... solo istruzioni più compatte su come prevederlo (una parola in codice). L'entropia massima teorica si ottiene quando è altrettanto probabile che la parola in codice successiva possa essere qualsiasi cosa. La compressione maggiore di dati compressi si verifica quando il secondo passaggio identifica la prevedibilità rimanente nell'output del primo.
ssokolow,
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.