Pourquoi tar ne peut-il pas extraire des fichiers .zip? [fermé]

28

J'ai essayé la majorité des formats (gzip, etc.) pour extraire un fichier zip avec tar, et quand je suis devenu assez frustré pour Google, je n'ai trouvé aucun moyen d'extraire un fichier zip avec taret seulement des recommandations à utiliser zipou unzip. En fait, mon système Linux n'a même pas d' ziputilitaire, mais seulement unzip(me laissant me demander pourquoi c'est la principale option recommandée). Bien sûr unzip, j'ai résolu mon problème, mais pourquoi ne pas tarextraire les fichiers zip? Peut-être devrais-je plutôt demander, quelle est la différence entre zip et les méthodes de compression prises en charge par tar?

Pluton
la source
1
Juste une note, bsdtarpeut extraire des .ziparchives: P
HalosGhost
12
Vous voulez dire comme, "pourquoi ne puis-je pas utiliser un ouvre-boîte pour hacher les carottes?" La chose est que tar a son propre format de fichier, puis le compresse avec la méthode que vous choisissez. zip est une bête complètement différente. Aussi simple que cela. C'est "la voie Unix", avoir un petit outil qui fait bien son travail, plutôt que d'avoir une truie laitière pondeuse qui saura répondre à tous vos besoins.
tink
J'ai légèrement modifié ma question pour le rendre plus clair, mais je pense que ma question impliquait clairement que je pensais que zip était un format de compression et non un outil de remplacement pour tar + compression. La réponse que j'ai choisie a corrigé ce que je supposais et a montré que la réponse n'était pas fondée sur l'opinion.
Pluton
Vous n'en avez pas zippar défaut car sa licence n'est pas compatible avec la GPL
venimus

Réponses:

29

La philosophie UNIX est d'avoir de petits outils. Un outil fait exactement une chose, mais c'est particulièrement bien.

L' taroutil combine simplement plusieurs fichiers en un seul fichier sans aucune compression.

L' gzipoutil ne fait que compresser un seul fichier.

Si vous voulez avoir les deux, il vous suffit de combiner les deux outils pour créer un .tar.gzfichier.


L' zipoutil est une chose complètement différente. Il prend un tas de fichiers et les combine en un seul fichier compressé. Avec des algorithmes totalement différents.


Si vous voulez qu'un outil les règle tous, utilisez-les atool. Il supportera tout un tas de formats différents simplement en détectant le format et en appelant le bon outil.

michas
la source
Merci d'avoir réellement expliqué le but des deux au lieu d'expliquer simplement ce que fait tar. J'ai rapidement trouvé la réponse après avoir consulté un article de Wikipédia qui répertorie les formats pour "Archivage", "Compression" et les deux dans trois tableaux différents. J'ai pensé que j'attendrais une réponse qui l'expliquerait clairement.
Pluton
Pour être un peu pointilleux, l' gzipalgorithme de compression est le même que celui utilisé par zip. La différence est qu'il gzipest censé compresser n'importe quel flux d'octets, y compris un .tarfichier, tandis que zip, dérivé et inspiré de PKZIP, compresse et archive en une seule étape (et dans cet ordre).
Joe Sewell
9

Pour faire court: l'outil tar GNU ne passe pas par le zip / dézipper car personne ne s'en soucie.

Longue histoire, taille originale:

tarn'était pas initialement destiné à décompresser et compresser des fichiers, mais à archiver plusieurs fichiers dans un seul gros fichier. Étant donné que les gens voulaient non seulement archiver leurs fichiers, mais aussi les compresser, ils dirigent simplement la tarsortie via n'importe quel compresseur qui accepte les entrées de flux de données et déposent les résultats dans un fichier. Profit!

Maintenant, pour rendre cette tâche aussi simple que possible, nous avons tardécidé de diriger en interne les fichiers générés vers des outils de compression, comme gzip, lzma, etc., qui étaient activés par des drapeaux spéciaux pour chaque format lors de l'exécution tar. C'est pourquoi lorsque vous essayez d'extraire un fichier corrompu, tarvous voyez l'erreur d'outil sous-jacente, au lieu de tar:

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

Donc, ce n'est pas que tarcela ne décompresse pas les fichiers zip, mais cela tarn'a pas la capacité de le diriger via l'outil approprié, car personne n'a vraiment pris la peine de l'implémenter, et zip accomplit déjà la fonction d'archivage de fichiers du fichier tar format, il y a moins de raisons pour que tar le supporte.

Maintenant, il existe des outils tout-en-un qui compressent / décompressent tout ce que vous leur lancez, encore une fois, vous devez avoir les bons outils pour les prendre en charge. Si vous ne les avez pas, l'outil échouera.

Braiam
la source
1
Eh bien, au-delà de la mise en œuvre du bon outil à utiliser, il n'y en a pas un: les fichiers tar ne combinent que plusieurs fichiers en un seul. La compression est distincte. Ainsi, les filtres de tuyaux tar traversent simplement la compression / décompression d'un seul fichier tar. Zip fonctionne différemment; il utilise un outil intégré pour compresser et combiner (un programme Unix similaire est afio).
derobert
Je suggère de mentionner quelques-uns des outils de compression tout-en-un qui existent. Par exemple, il y a le GNOME file-roller...
derobert
@derobert file-roller ne prend en charge le zip que si vous avez installé unzip / zip / p7zip. Sinon, c'est tout aussi inutile que le goudron.
Braiam
tar ne prend en charge ses différentes versions compressées que si l'outil approprié est également installé ... Les gestionnaires d'archives multiformats sont utiles car ils vous offrent une interface cohérente pour gérer différents formats d'archives.
derobert
@derobert exactement.
Braiam
3

Un tarfichier est un format de fichier en soi conçu pour les archives sur bande. Ce format peut ensuite être compressé en utilisant (par exemple) gzipou bzip2des formats de compression. Lorsque vous extrayez un fichier tar compressé, vous le décompressez effectivement, puis extrayez les fichiers d'origine du tarfichier non compressé .

Lorsque vous extrayez un zipfichier, il ne tarcontient aucun fichier, juste tous vos fichiers d'origine. Il n'y a donc aucune raison de tars'impliquer dans le processus.

Vous pouvez également compresser des fichiers en utilisant gzipou bzip2par eux-mêmes, tout comme vous pouvez créer des zipfichiers (sans tarimplication). Lorsque vous décompressez ces fichiers, vous utilisez gunzipou bunzip2non tar.

garethTheRed
la source
1

Comme la réponse "Certaines choses sont justes et nous devons les accepter" ne me convient pas non plus, j'ai juste fait quelques recherches (toujours bon d'apprendre quelque chose de nouveau n'est-ce pas?).

Il semble donc que la question soit de savoir où sont passés les outils et quel était leur objectif.

Au lieu de paraphraser ce que j'ai trouvé et de rendre les eaux inutilement troubles (l'obscurcissement me fait chier), jetez un œil à cet article: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

Je suppose que tar aurait pu intégrer le support zip, mais les méthodologies sont apparemment fondamentalement différentes. Ou peut-être ont-ils pensé pourquoi quelqu'un utiliserait cet outil d'archivage pour gérer les fichiers à partir d'un autre outil d'archivage et de compression (ou peut-être qu'il y avait un argument entre les deux codeurs d'origine et qu'une ordonnance de non-communication avait été déposée qui interdisait aux zips de traverser la limite de l'application.) . oui je plaisante).

Yuppers
la source