web-dev-qa-db-fra.com

Pourquoi tar ne peut-il pas extraire des fichiers .zip?

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 tar et uniquement des recommandations pour utiliser Zip ou unzip. En fait, mon système Linux n'a même pas d'utilitaire Zip, mais seulement unzip (me laissant me demander pourquoi c'est la principale option recommandée). Bien sûr, unzip a fonctionné, résolvant mon problème, mais pourquoi tar ne peut-il pas extraire des fichiers Zip? Je devrais peut-être plutôt demander quelle est la différence entre Zip et les méthodes de compression prises en charge par tar?

31
Pluto

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

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

L'outil gzip compresse simplement un seul fichier.

Si vous voulez avoir les deux, il vous suffit de combiner les deux outils pour obtenir un .tar.gz fichier.


L'outil Zip 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 atool. Il supportera un tas entier de différents formats simplement en détectant le format et en appelant le bon outil.

33
michas

Pour faire court: tar GNU ne passe pas par Zip/décompressez car personne ne s'en soucie.

Longue histoire, taille originale:

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

Maintenant, pour rendre cette tâche aussi simple que possible, tar a dé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 de tar. C'est pourquoi lorsque vous essayez d'extraire un fichier corrompu via tar, vous voyez l'erreur sous-jacente de l'outil, au lieu de tar:

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

Donc, ce n'est pas que tar ne décompresse pas les fichiers Zip, juste que tar n'a pas la possibilité 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 format de fichier tar, 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.

9
Braiam

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

Lorsque vous extrayez un fichier Zip, il n'y a pas de fichier tar, juste tous vos fichiers d'origine. Par conséquent, il n'y a aucune raison que tar soit impliqué dans le processus.

Vous pouvez également compresser des fichiers à l'aide de gzip ou bzip2 tout comme vous pouvez créer des fichiers Zip (sans tar impliqué). Lorsque vous décompressez ces fichiers, vous utilisez gunzip ou bunzip2 et non tar.

3
garethTheRed

Comme la réponse "Certaines choses sont justes et nous devons les accepter" ne me convient pas non plus, je viens de creuser (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), consultez 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 qu'ils ont 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).

1
Yuppers