Qual è il metodo di compressione più veloce per un gran numero di file?


14

Ho bisogno di comprimere una directory con circa 350.000 file abbastanza piccoli che ammontano a circa 100 GB in totale. Sto usando OSX e attualmente sto usando lo strumento "Comprimi" standard che converte questa directory in un file .zip. C'è un modo più veloce per farlo?


Probabilmente non puoi battere tar, poiché in realtà non comprime, solo archivia, senza opzioni specifiche che lo abilitano. Nelle risposte, mi piacerebbe vedere prove, nessuna opinione ...
Daniel Beck

1
Dipende da quanta compressione vuoi.
ta.speot.is

1
Ho finito per usare tar e per motivi di velocità non ho ancora provato a comprimerlo. È stato in grado di completare in tempo per quello di cui avevo bisogno. Grazie!
Spike,

@DanielBeck, il problema con tar è che non mostrano l'albero delle directory. Quindi, anche per avere una "vista", dobbiamo decomprimere l'intero tar. Esistono alternative a tar che mostra la vista della directory?
Pacerier,

Risposte:


15

Per le directory taruserei un pipe bzip2con la massima compressione.

un modo semplice per andare è

tar cfj archive.tar.bz2 dir-to-be-archived / 

Funziona alla grande se non hai intenzione di recuperare piccoli set di file dall'archivio
e stai solo pianificando di estrarre il tutto quando / dove richiesto.
Eppure, se si fa vuole ottenere un piccolo insieme di file fuori, non è troppo male.

Preferisco chiamare tali archivi filename.tar.bz2ed estrarre con l' xfjopzione ' '.

Il tubo a compressione massima si presenta così,

tar cf - dir-to-be-archivated / | bzip2 -9 -> archive.tar.bz2  
# ^ pipe tarball da qui per zippare ^ nel file di archivio. 

Nota: il bzip2metodo " " e una maggiore compressione tendono ad essere più lenti del normale gzipda " tar cfz".

Se si dispone di una rete veloce e l'archivio verrà posizionato su una macchina diversa,
è possibile accelerare con un tubo attraverso la rete (utilizzando effettivamente due macchine insieme).

tar cf - dir / | ssh user @ server "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ pipe tarball sulla rete per comprimere ^ e archiviare su macchina remota.

Alcuni riferimenti,

  1. Linux Journal: Compression Tools Comparared , 28 luglio 2005
  2. gzip vs. bzip2 , 26 agosto 2003
  3. Un rapido benchmark: Gzip vs. Bzip2 vs. LZMA , 31 maggio 2005

2
L'interrogatore ha chiesto il metodo più veloce, la decompressione di un tar da 100 Gb richiederebbe una vita! Arriva un punto in cui lo spazio su disco è così economico che prendere eoni per spremere ogni ultima possibile ridondanza è solo uno spreco insensato di risorse, a meno che non sia assolutamente necessario. Con la maggior parte dell'utilizzo del disco occupato nello spazio lento, comprimere il tar con -1 probabilmente farebbe abbastanza bene il lavoro e consentirebbe di passare all'attività successiva qualche mese prima!
Andy Lee Robinson,

Anche se sono d'accordo sul fatto che un file da 100 GB probabilmente non valga la pena comprimerlo nella sua totalità, non credo che bzip2 impiegherà linearmente più tempo per 100 GB rispetto a 1 GB (diciamo). Mi piacerebbe vedere qualche teoria o dati per mostrare entrambi i modi.
nik,

Comprendo che il dizionario di bzip2 è adattivo, quindi è costantemente alla ricerca di nuovi licenziamenti all'interno della sua finestra di ricerca fino alla fine del file. Fatta salva l'omogeneità dell'entropia del file, dovrebbe essere relativamente lineare. Sarebbe un cattivo compressore che presupponeva che avesse tutto il necessario dall'inizio del file per essere in grado di comprimere rapidamente il resto, ma in alcuni casi potrebbe essere tutto ciò che è necessario, anche se ci sono modi migliori per invecchiare che farlo funzionare empiricamente con set di dati da 100 GB!
Andy Lee Robinson,

7

Questo ragazzo ha fatto delle ricerche su questo. Sembra che .zip comprimerà i file più grandi più velocemente. Tuttavia, produce una delle dimensioni di compressione più grandi. Sembra anche che stesse usando le utilità di Windows, ma scommetto che l'utilità di OSX è quasi ottimizzata.

Ecco un eccellente sito Web in cui sono state confrontate numerose utility di compressione per la velocità su molti file. Ci sono molti altri test su quel sito che potresti guardare per determinare la migliore utility per te.

Gran parte della velocità ha a che fare con il programma che usi. Ho usato l'utility 7zip per Windows e trovo che sia molto veloce. Tuttavia, la compressione di molti file richiede molto tempo, non importa cosa, quindi vorrei lasciarlo andare da un giorno all'altro. Oppure potresti semplicemente tar tutto e non comprimerlo ... Personalmente odio decomprimere archivi di grandi dimensioni, quindi starei attento se è quello che vuoi fare.


0

Preferisco usare

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

per spostare file su altri server e convertirli contemporaneamente


1
Che è già suggerito nella risposta migliore da @nik. Non c'è bisogno di duplicare per enfasi, basta votare l'altra risposta o aggiungere un commento se hai qualcosa di sostanziale ma non vuoi dare una risposta implicata. ; o)
pbhj
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.