Qual è più efficiente: compressione tar o zip? Qual'è la differenza tra tar e zip?


68

Sto lavorando in ambiente Linux e voglio conoscere i comandi tar e zip.

Qual è più efficiente: tar o zip? Devo anche conoscere le differenze tra i comandi tar e zip. Qualcuno può spiegarmeli?

Risposte:


78

tarcrea solo un singolo file da più file, non esegue la compressione a meno che non sia combinato un programma di compressione come gzipo bzip2(che è possibile chiamare dall'interno tarutilizzando rispettivamente le opzioni -zo -j). zipcombina l'archiviazione e la compressione in un unico programma.


60

catrame

  • Supponiamo che leggerai da un'estremità all'altra: "Tape ARchive". (L'età del comando mostra ...)
  • Non esegue la compressione, ma è possibile comprimere l'intero flusso risultante eseguendo il piping tramite ad esempio gzip e bzip2 (eseguito internamente con -z o -j)
  • Memorizza gli attributi di file unix : uid, gid, permessi (in particolare eseguibile). L'impostazione predefinita può dipendere dalla tua distribuzione e può essere attivata / disattivata con le opzioni.

cerniera lampo

  • Memorizza gli attributi MSDOS . (Archivio, di sola lettura, nascosto, sistema)
  • Comprime ogni file, quindi li aggiunge a un archivio
  • Include una tabella dei file alla fine del file
  • e come risultato dei primi due, consente di leggere solo le parti esatte sul file necessario.

Il fatto che zip comprima i file separatamente avrà un impatto sui rapporti di compressione, in particolare su molti piccoli file simili.

(Almeno questo era esattamente corretto un decennio fa.)


23

Tar conserva molti più metadati di Zip, vedi il mio confronto (è leggermente obsoleto):

inserisci qui la descrizione dell'immagine

(Clicca per ingrandire)

Tar supera il 65% dei test, mentre Zip supera solo il 17%. Ho reso disponibile la suite di test su github con licenza BSD, così puoi provare tu stesso se hai un Mac. Per Linux non sono sicuro che ci siano metadati, quindi questi test potrebbero non essere pertinenti.


Interessante! +1 per questo. Ma poi di nuovo, quello era un programma enorme. Hai scritto questo per altri scopi? Solo curioso.
CppLearner

Ho scritto i test per un file manager su cui stavo lavorando alcuni anni fa. Non l'ho mai rilasciato però.
neoneye,

1
Anche Linux ha metadati, quindi dovrebbe funzionare per questo.
zeitue,

14

L'efficienza può essere misurata in diversi modi:

  1. Quanto dura il processo?
  2. Quanto sono grandi i file risultanti?

Ci sono anche altre domande, come "Quanto sono comuni gli strumenti per manipolare gli archivi risultanti?"

Quindi, ad esempio, bzip2crea file più piccoli di gzip, ma può richiedere molto più tempo. Inoltre, nella mia esperienza gzipè universale su sistemi simili a Unix, ma non lo bzip2è ancora (sebbene sia molto comune e di solito facile da ottenere).


3
7zip ( 7-zip.org ) è un'altra buona opzione per ottenere una compressione eccellente a spese del tempo della CPU. Meno comune di bzip2 (non installato di default ovunque io sia a conoscenza) ma facile da installare nella maggior parte dei luoghi (è nei repository standard per la maggior parte delle distribuzioni Linux e c'è un semplice pacchetto di installazione per Windows. Come tar + gzip porta il finestra di compressione tra i file di input in modo da ottenere un risparmio ancora maggiore rispetto a zip quando si includono molti file di piccole dimensioni
David Spillett

3
L'efficienza può anche essere misurata da quanto bene conserva i dati, vedi la mia risposta a questa domanda. Tar è molto meglio di zip nel preservare i dati.
neoneye,

1
un'altra misura potrebbe essere compatibile al di fuori di UNIX. Windows funziona bene con zip (integrato in Windows), di solito può facilmente elaborare tar.gz con shareware, ma è raro trovare bzip2. Purtroppo la domanda originale non ha menzionato questi criteri, quindi non riesco a vedere se sono pertinenti.
Rich Homolka,

1
Una volta ho fatto una revisione approfondita del rapporto di compressione rispetto al tempo richiesto per alcuni compressori comuni e quale sarebbe il più efficiente a seconda di come valorizzi lo spazio rispetto al tempo: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim

9

Come notato da Wim, il catrame stesso non si comprime. Se aggiungi comprimere tar (ad esempio per ottenere un .tar.gz o .tar.bz2), stai comprimendo l'intero file tar in una sola volta. Al contrario, zip comprime ogni file singolarmente.

L'efficienza dipende dal carico di lavoro. In particolare, zip consente di accedere direttamente ai singoli file. Con tar, devi prima cercare tra i file indesiderati (compressi) prima. Le prestazioni di compressione dipendono da ciò che stai comprimendo. tarcon bzip2è spesso migliore per un gran numero di file simili (ad esempio una directory di origine). zippotrebbe essere migliore se ogni file ha un contenuto molto diverso.


4
... d'altra parte, devi ottenere l'intero file zip prima di poter accedere al contenuto, perché il toc è posizionato alla fine. al contrario, puoi decomprimere un catrame con la stessa velocità con cui arrivano i byte ...
Akira

6

Gli archivi zip contengono una directory centrale dei loro contenuti alla fine (molto probabilmente per evitare di dover creare la directory in anticipo, dove non sai ancora cosa ci sarà dentro). Ciò consente di estrarre rapidamente singoli file senza dover decomprimere l'intero archivio: basta leggere la directory dell'archivio ed estrarre solo ciò che è necessario. Tuttavia, ciò richiede che l'intero archivio sia accessibile e richieda un accesso casuale che è disponibile solo su dispositivi a blocchi (floppy disk, hard disk). Inoltre, la directory dell'archivio è vulnerabile: se l'archivio viene troncato per qualche motivo, richiede una pesante procedura guidata per estrarre qualsiasi cosa utile dall'archivio.

Gli archivi zip sono stati creati per l'uso di BBS, dove era importante essere in grado di raggruppare il contenuto di una directory in un singolo file (e compresso) --- invece di dover scaricare forse migliaia di singoli file. Proprio come la maggior parte dei siti Web raggruppa i loro download anche oggi, per gli stessi motivi.

Gli archivi Tar sono stati ideati per raggruppare i backup da utilizzare per le unità nastro, quindi per l'accesso sequenziale . Non esiste una directory centrale; invece, l'archivio contiene blocchi di intestazione a intervalli regolari che indicano quali file seguiranno nei prossimi blocchi. Gli archivi di catrame devono essere letti in un colpo solo; se deve essere estratto solo un singolo file, l'archivio viene letto in sequenza, a partire dall'inizio fino a quando non viene trovato il file richiesto (che può anche essere alla fine). La compressione viene applicata in aggiunta a ciò; ciascuno dei vari programmi di compressione che vengono applicate agli archivi tar ( compress, gzip,bzip2ecc.) sono compressori di flusso e non alterano in alcun modo la natura sequenziale dell'archivio. Nel peggiore dei casi, avresti bisogno di leggermente più blocchi fino a quando non puoi iniziare a estrarre.

Può sembrare una banale differenza, ma in realtà rappresenta un opposto polare in filosofia. Con gli archivi zip, c'è sempre la necessità di avere l'intero file a portata di mano per fare qualcosa di utile con esso, mentre un archivio tar può essere trasmesso a una pipeline. Posso scaricare un grande archivio tar e iniziare ad estrarlo dall'inizio, non appena arrivano i primi blocchi (e forse interrompere il download non appena ottengo il file che sto cercando). Per un archivio Zip, devo aspettare fino a quando appare la directory dell'archivio, che arriva alla fine dell'archivio. Ma una volta che fare avere l'intero file a portata di mano, l'estrazione di contenuto parziale da esso sarà molto più veloce da un file tar.

Entrambi i formati hanno un punto di forza, a seconda di dove e come vengono utilizzati. Poiché le pipeline (e quindi la nozione di streaming di dati da un processo all'altro) esistono davvero solo nel mondo Unix, il vantaggio principale degli archivi tar è perso su altri sistemi, motivo per cui gli archivi Zip sono molto più popolari lì. Ma gli archivi tar sono più flessibili, motivo per cui li preferisco ogni volta che ho una scelta.


5

Come già detto l'altro, tar crea un grande "blocco" di tutti i file che possono essere compressi con un stream stream come gzip o bzip2.

Lo svantaggio di questo è che devi decomprimere l'intero file per accedere a un file all'interno dell'archivio.

Il vantaggio è che il rapporto di compressione è generalmente più elevato, specialmente quando i file compressi sono molto simili.

Altri packer come "rar" hanno una "modalità blocco" (o simile) per avere lo stesso effetto.

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.