Le TGZ est un tar compressé avec gzip, le réglage par défaut du monde Unix. Le TAR est un assemblage de fichiers non compressé, à la manière d'Unix. Python se tient entre les deux, et cette page dit exactement ce qui arrive à un fichier TGZ en route vers le TAR.
Ce qui s'exécute quand un fichier TGZ devient un TAR
Python et sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Votre fichier TGZ est envoyé une fois, Python s'exécute une fois, le fichier TAR revient, et aucun des deux fichiers n'est conservé. TGZ vers TAR fait partie des 3649 paires sur lesquelles ce moteur a été sondé avec un vrai fichier, et c'est pour cela que cette page existe quand celles que la sonde n'a pas su prouver n'existent pas.
Ce qui survit du fichier TGZ dans le fichier TAR
Chaque fichier, octet pour octet, avec le chemin qu'il avait. Cette paire lit chaque membre du TGZ et l'écrit dans le TAR sans le changer : rien n'est recompressé deux fois, réencodé ni renommé. Le moteur compte les membres à la sortie et refuse le résultat si le compte a bougé.
L'arborescence. Un fichier qui vivait dans rapports/2024/ arrive dans rapports/2024/, et c'est ce qui rend le TAR ouvrable plutôt qu'informe.
La vitesse, et rien d'autre. Un TAR ne compresse rien : cette paire ne coûte donc presque pas de temps. Mesuré sur ce moteur, 200 Mo passent en 3,3 secondes contre 59 pour 7z. C'est le format qu'on veut quand autre chose va le compresser, ou quand les fichiers sont déjà compressés et que les serrer encore ne ferait que perdre des minutes.
Les métadonnées de fichier telles que le monde Unix les enregistre. Le TAR a été écrit pour la bande en 1979 et il garde ce que la bande gardait.
Ce que la conversion TGZ vers TAR vous coûte
Les liens symboliques, les liens matériels et les fichiers spéciaux. Ils sont écartés plutôt que copiés, et la réponse dit combien : un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit, et en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Si votre TGZ porte des liens, le TAR portera les fichiers et pas les liens.
Les permissions et la propriété Unix. Le TAR est écrit avec un mode fixe et un horodatage nul, délibérément : la même entrée produit alors toujours les mêmes octets, et les droits d'une machine que vous ne contrôlez pas ne signifient rien sur la vôtre.
La compression entièrement, ce qui est le but et surprend quand même. Un TAR pose les fichiers bout à bout et n'en serre aucun : attendez-vous à ce qu'il soit aussi gros que son contenu, parfois plus gros que le TGZ dont vous êtes parti.
D'où viennent les fichiers TGZ et TAR
TGZ. Un tar passé dans gzip, 1992. Le couple compresse l'ensemble d'un coup plutôt que fichier par fichier, ce qui lui fait battre le ZIP sur un dossier de fichiers semblables. Le prix, c'est que rien ne se lit sans décompresser ce qui précède.
TAR. Tape ARchive, 1979, et il fait exactement ce que son nom dit : il pose les fichiers bout à bout avec leurs métadonnées et ne compresse rien. C'est pourquoi on l'associe presque toujours à un compresseur, et pourquoi un .tar nu est en général plus gros que les fichiers qu'il contient.
Si un modèle doit lire le fichier TAR
La structure est ce qui subsiste du fichier TGZ, et la structure est ce dont un modèle a besoin. TGZ en entrée, TAR en sortie, avec l'arbre des titres intact plutôt qu'aplati en un seul long paragraphe.
TGZ vers TAR, mesuré plutôt que promis
En passant TGZ vers TAR sur le moteur réel avec un vrai fichier, Python a écrit 10 240 octets au format TAR en moins d'un dixième de seconde, machine par ailleurs au repos. C'est un fichier TGZ un jour donné et non une moyenne, et c'est pourquoi le nombre est donné avec le fichier qui l'a produit.
Le verdict TGZ vers TAR a été obtenu par la relecture des membres de l'archive et la recherche d'un mot témoin, c'est-à-dire que la sortie a été relue et reconnue. Le contrôle employé compte, parce qu'ils ne prouvent pas tous la même chose, et un code de statut 200 ne prouve strictement rien sur ce que le fichier TAR contient.
Les autres routes vers TAR, et ce qu'elles ont mesuré
Parmi les routes publiées vers TAR, TGZ est la plus grosse sortie des 3 mesurées. Les fichiers témoins diffèrent : ce classement porte sur la sonde et non sur votre document.
7Z vers TAR : 10 240 octets en moins d'un dixième de seconde.
ZIP vers TAR : 10 240 octets en moins d'un dixième de seconde.
Ce que nous ne prétendrons pas sur TGZ vers TAR
Un fichier TGZ de plus de 100 Mo est refusé avant la fin de l'envoi plutôt qu'après, pour que vous n'attendiez pas un refus.
Une conversion TGZ vers TAR qui dépasse 110 secondes est tuée, et le processus Python avec elle. Une exécution abandonnée resterait posée sur l'un des deux cœurs de la machine jusqu'à ce que quelqu'un le remarque.
Une archive est le seul type de fichier dont le contenu décide de la place qu'il prendra une fois ouvert, et deux kilooctets peuvent porter dix gigaoctets de zéros. C'est une bombe de décompression, elle a trente ans et elle marche encore. Trois limites y répondent ici, et elles COMPTENT au lieu de croire l'en-tête, qui peut mentir : 100 Mo envoyés, 250 Mo une fois décompressés, 5 000 entrées. Un TGZ qui dépasse l'une d'elles est refusé, et le refus dit laquelle.
Rien n'est écrit sur disque de notre côté, pas même temporairement. Une archive est aussi le seul type de fichier dont le contenu décide des NOMS DE FICHIER, et une entrée appelée ../../etc/passwd est une attaque aussi vieille que le format. Les membres passent du TGZ au TAR en mémoire : il n'y a donc aucun répertoire de destination dont s'échapper. Les noms sont malgré tout nettoyés avant d'entrer dans le TAR ; cette partie-là protège celui qui l'ouvre, pas nous.
Un fichier TGZ à la fois, choisi dans le navigateur. Il n'y a rien d'autre à régler et rien d'autre à proposer.
TGZ vers TAR : les questions que l'on pose
Qu'est-ce qui convertit vraiment mon fichier TGZ en TAR ?
C'est Python qui s'en charge, avec sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Ni astuce de navigateur, ni service d'un tiers : le fichier TGZ est envoyé une fois, Python s'exécute une fois, le TAR revient, et aucun des deux fichiers n'est conservé ensuite.
Combien de temps prend une conversion TGZ vers TAR ?
Sur le fichier utilisé par la sonde, Python a mis moins d'un dixième de seconde et écrit 10 240 octets de TAR. C'est une mesure réelle sur un fichier TGZ réel, pas une moyenne et pas une promesse sur le vôtre : un TGZ plus gros prend plus longtemps, et au-delà de 110 secondes l'exécution est arrêtée.
Qu'est-ce que je perds en passant du TGZ au TAR ?
Celle qu'il faut connaître en premier : les liens symboliques, les liens matériels et les fichiers spéciaux. Ils sont écartés plutôt que copiés, et la réponse dit combien : un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit, et en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Si votre TGZ porte des liens, le TAR portera les fichiers et pas les liens.
Mes fichiers sont-ils modifiés d'une manière ou d'une autre ?
Non. Chacun est lu du TGZ et écrit dans le TAR octet pour octet, avec le chemin qu'il avait. Ce qui change, c'est la boîte autour d'eux. Le moteur compte les membres à la sortie et refuse le résultat si le compte a bougé, ce qui est la seule façon dont cela pourrait mal tourner en silence.
Pourquoi voudrais-je un TAR non compressé ?
Deux raisons. Autre chose va le compresser, et compresser deux fois perd du temps pour rien. Ou bien les fichiers à l'intérieur sont déjà compressés, images ou vidéos, et les serrer encore ne gagne presque rien tout en coûtant des minutes.
Qu'advient-il des liens symboliques ?
Ils sont écartés, et la réponse dit combien. Un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit ; en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Les fichiers restent, les liens non.
Y a-t-il une limite de taille ?
Trois, et elles sont plus strictes que pour les autres formats, pour une raison : une archive décide de la place qu'il lui faut une fois ouverte, et deux kilooctets peuvent en porter dix gigaoctets. 100 Mo envoyés, 250 Mo une fois décompressés, 5 000 entrées. Au-delà de l'une d'elles, la réponse dit laquelle plutôt qu'un refus générique.
La conversion TGZ vers TAR est-elle gratuite ?
Il y a une franchise gratuite chaque mois, et une conversion TGZ vers TAR coûte un demi-crédit dessus. Quand la franchise est épuisée, l'outil le dit et s'arrête, plutôt que de vous remettre discrètement un TAR moins bon.