Perché tar non può estrarre i file .zip? [chiuso]


28

Ho provato la maggior parte dei formati (gzip, ecc.) Con cui estrarre un file zip tar, e quando sono diventato abbastanza frustrato da Google per questo, non ho trovato il modo di estrarre un file zip con tare solo consigli da usare zipo unzip. È un dato di fatto, il mio sistema Linux non ha nemmeno zipun'utilità, ma solo unzip(lasciandomi chiedermi perché questa è l'opzione principale raccomandata). Naturalmente ha unzipfunzionato, risolvendo il mio problema, ma perché non è possibile tarestrarre i file zip? Forse dovrei invece chiederti, qual è la differenza tra i metodi di compressione e zip supportati da tar?


1
Solo una nota, è bsdtarpossibile estrarre .ziparchivi: P
HalosGhost

12
Intendi dire "perché non posso usare un apriscatole per tagliare le carote?" Il fatto è che tar ha il proprio formato di file, quindi lo comprime con qualunque metodo tu scelga. zip è una bestia completamente diversa. Semplice come quella. È "il modo unix", avere un piccolo strumento che fa un buon lavoro, piuttosto che avere una scrofa di latte con la deposizione delle uova e la lana che soddisferà tutte le tue esigenze.
Tink

Ho leggermente modificato la mia domanda per renderlo più chiaro, ma penso che la mia domanda implicasse chiaramente che pensavo che zip fosse un formato di compressione e non uno strumento di sostituzione per tar + compressione. La risposta che ho scelto ha corretto ciò che stavo assumendo e ha dimostrato che la risposta non era basata sull'opinione.
Plutone,

Non lo hai zipdi default perché la sua licenza non è compatibile con GPL
venimus

Risposte:


29

La filosofia UNIX è quella di avere piccoli strumenti. Uno strumento sta facendo esattamente una cosa, ma questo particolarmente bene.

Lo tarstrumento sta solo combinando diversi file in un singolo file senza alcuna compressione.

Lo gzipstrumento sta solo comprimendo un singolo file.

Se si desidera avere entrambi, è sufficiente combinare entrambi gli strumenti risultanti in un .tar.gzfile.


Lo zipstrumento è completamente diverso. Prende un sacco di file e li combina in un singolo file compresso. Con algoritmi totalmente diversi.


Se vuoi che uno strumento li regoli tutti li usi atool. Supporterà un sacco di formati diversi semplicemente rilevando il formato e chiamando lo strumento corretto.


Grazie per aver effettivamente spiegato lo scopo di entrambi invece di spiegare semplicemente cosa fa Tar. Ho presto capito la risposta dopo aver visto un articolo di Wikipedia che elencava i formati per "Archiviazione", "Compressione" ed entrambi in tre diverse tabelle. Ho pensato di aspettare una risposta che spiegasse chiaramente questo.
Plutone,

Per essere un po 'esigente, l' gzipalgoritmo di compressione è lo stesso utilizzato da zip. La differenza è che gzipsi intende comprimere qualsiasi flusso di byte, incluso un .tarfile, mentre zip, derivato e ispirato da PKZIP, comprime e archivia in un unico passaggio (e in quell'ordine).
Joe Sewell,

9

Per farla breve: lo strumento tar GNU non esegue il pipe-through di zip / unzip poiché a nessuno importa.

Lunga storia, dimensioni originali:

tarinizialmente non era pensato per decomprimere e comprimere i file, ma per archiviare più file in un unico grande file. Dal momento che le persone non volevano solo archiviare i propri file, ma anche comprimerli, quindi eseguono il pipe tardell'output attraverso qualsiasi compressore che accetta l'input del flusso di dati e rilascia i risultati in un file. Profitto!

Ora, per rendere tale compito il più indolore possibile, ha tardeciso di convogliare internamente i file generati su strumenti di compressione, come gzip, lzma, ecc., Che sono stati attivati ​​da flag speciali per ciascun formato durante l'esecuzione tar. Ecco perché quando provi a estrarre un file danneggiato attraverso di tarte viene mostrato l'errore dello strumento sottostante, invece di tar:

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

Quindi, non è che tarnon decomprime i file zip, solo che tarnon ha la capacità di instradarlo attraverso lo strumento corretto, dal momento che nessuno si è davvero preoccupato di implementarlo e zip già svolge la funzione di archiviazione dei file del file tar formato c'è meno motivo per tar per supportarlo.

Ora, ci sono strumenti all-in-one che comprimono / decomprimono tutto ciò che si lancia loro, ancora una volta, è necessario disporre degli strumenti corretti per supportarlo effettivamente. Se non li hai, lo strumento fallirà.


1
Bene, oltre a nessuno che implementa lo strumento giusto per passare, non ce n'è uno: i file tar combinano solo più file in uno. La compressione è separata. Quindi i filtri tar canalizzano semplicemente comprimendo / decomprimendo un singolo file tar. Zip funziona in modo diverso; utilizza uno strumento integrato per comprimere e combinare (un programma Unix simile è afio).
derobert,

Suggerirei di menzionare alcuni degli strumenti di compressione all-in-one esistenti. Ad esempio, c'è GNOME file-roller...
derobert il

Il file-roller @derobert supporta zip solo se è stato installato unzip / zip / p7zip. Altrimenti è altrettanto inutile come il catrame.
Braiam,

tar supporta le sue varie versioni compresse solo se è installato anche lo strumento pertinente ... I gestori di archivi multiformato sono utili perché offrono un'interfaccia coerente per gestire diversi formati di archivio.
derobert,

@derobert esattamente.
Braiam,

3

Un tarfile è un formato di file in sé progettato per gli archivi su nastro. Questo formato può quindi essere compresso utilizzando (ad esempio) gzipo bzip2formati di compressione. Quando si estrae un file tar compresso, lo si decomprime efficacemente, quindi si estraggono i file originali dal tarfile non compresso .

Quando si estrae un zipfile non vi è alcun tarfile al suo interno, solo tutti i file originali. Pertanto non vi è alcun motivo per taressere coinvolti nel processo.

Puoi anche comprimere i file usando gzip o bzip2da soli, proprio come puoi creare zipfile (senza alcun tarcoinvolgimento). Quando decomprimi questi file, usi gunzipo bunzip2no tar.


1

Dato che la risposta "Alcune cose sono e dovremmo accettarle" non mi sta bene, ho anche fatto qualche scavo (sempre bello imparare qualcosa di nuovo, non è vero?).

Quindi sembra che il problema sia uno di dove sono andati gli strumenti e quale era il loro obiettivo.

Invece di parafrasare ciò che ho trovato e rendere le acque inutilmente torbide (l'offuscamento mi fa incazzare), dai un'occhiata a questo articolo: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

Suppongo che tar avrebbe potuto incorporare il supporto zip, ma le metodologie sono apparentemente sostanzialmente diverse. O forse hanno pensato perché qualcuno avrebbe usato questo strumento di archiviazione per gestire i file da un altro strumento di archiviazione e compressione (o forse c'era qualche argomento tra i due programmatori originali e c'era un ordine restrittivo archiviato che non consentiva alle cerniere di attraversare il confine dell'applicazione. Sì, sto scherzando).

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.