Risposte:
tar
crea solo un singolo file da più file, non esegue la compressione a meno che non sia combinato un programma di compressione come gzip
o bzip2
(che è possibile chiamare dall'interno tar
utilizzando rispettivamente le opzioni -z
o -j
). zip
combina l'archiviazione e la compressione in un unico programma.
catrame
cerniera lampo
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.)
Tar conserva molti più metadati di Zip, vedi il mio confronto (è leggermente obsoleto):
(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.
L'efficienza può essere misurata in diversi modi:
Ci sono anche altre domande, come "Quanto sono comuni gli strumenti per manipolare gli archivi risultanti?"
Quindi, ad esempio, bzip2
crea 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).
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. tar
con bzip2
è spesso migliore per un gran numero di file simili (ad esempio una directory di origine). zip
potrebbe essere migliore se ogni file ha un contenuto molto diverso.
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
,bzip2
ecc.) 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.
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.