Selon la spécification de GZ, le fichierizeize est enregistré dans les derniers filets d'un fichier .gz.
J'ai créé 2 fichiers avec p> i gzipède leur p> J'ai vérifié les 4 derniers octets faisant p> Il semble que frapper la barrière invisible de 32 bits, rend la valeur écrite. dans l'isis complètement absurde. Ce qui est plus ennuyeux, que s'ils avaient utilisé un peu d'erreur à la place. P> Est-ce que quelqu'un sait un moyen d'obtenir le fichier de fichiers non compressé .gz sans extraire? P> Merci P> Spécification: http://www.gzip.org/zlib /RFC-GZIP.HTML P> EDIT:
Si quelqu'un pour l'essayer, vous pouvez utiliser / dev / zéro au lieu de / dev / urandom p> p>
3 Réponses :
Je n'ai pas essayé cela avec un fichier de la taille que vous avez mentionnée, mais je trouve souvent la taille non compressée em> de fichier .gz avec quand Je ne veux pas laisser le fichier non compressé couché ou la peine de la compresser à nouveau. P> évidemment, les données sont non compressées, mais sont ensuite pipiées à Ça vaut la peine d'essayer, de toute façon. p> puis je l'ai compressé avec alors merci pour l'attente p> p> p> P> P> WC code>. P>
5G Code> de la taille 5120000000, bien que mon gestionnaire de fichiers ait signalé ceci comme 4,8 g p>
gzip 5g code>, les résultats
5g.gz code > C'était la même taille (pas beaucoup de compression des données aléatoire em>). p>
zcat 5g.gz | WC -C CODE> a signalé la même taille que le fichier d'origine: 5120000000 octets. Donc, ma suggestion semblait avoir travaillé pour ce procès, de toute façon. P>
Oui merci, mais ma question était plus dans le sens de. Comment puis-je obtenir les fichiers non compressés sans faire de décompression. Pour les fichiers plus petits que 32 bits. Vous pouvez simplement extraire les 4 derniers octets. Cela n'est pas possible pour les fichiers plus gros et comme vous l'avez fait, le seul moyen est de faire une décompression.
Mais ma méthode a effectué une décompression qui n'a pas affecté le fichier compressé d'origine et n'a pas créé de fichier supplémentaire non compressé. Il n'y aurait pas de nettoyage après. Et je pense qu'il convient de noter que la réponse que vous avez acceptée a déclaré que la décompression était la seulement i> moyen d'obtenir la taille exacte. Il est logique que la seule façon de savoir ce qui est dans la boîte, c'est l'ouvrir i>.
Oui, cela n'a pas affecté le fichier d'origine, mais ma préoccupation ne faisait pas "ne pas toucher" le fichier, mais simplement un problème de vitesse. Si je veux affecter un tableau pour l'ensemble des données, je devrais connaître la taille. Cela nécessite de faire une décompression, suivie d'une autre décompression pour la datacopie réelle. Ceci n'est pas nécessaire si le fichier est inférieur à 2,1 gig. std gunzip peut également décompresser à stdout, faire des fichiers gunzip -c | wc -c mais merci pour votre entrée :)
Tous les commentaires avaient mis à part: si tout le reste échoue une solution pratique.
Il n'y en a pas. P>
Le seul moyen d'obtenir la taille exacte d'un flux compressé est de le décompresser et de le décompresser (même si vous écrivez tout sur / dev / null et comptez simplement les octets). P>
sa valeur notable que l'isisé est définie comme p>
isize (taille d'entrée)
Ceci contient la taille de l'entrée d'origine (non compressée)
Data MODULO 2 ^ 32. P> blockQuote>dans le gzip RFC afin que ce ne soit pas réellement rupture < / em> à la barrière 32 bits, ce que vous voyez est un comportement attendu. P>
gzip a une option -l -l:
Cette solution ne fonctionne que pour un fichier de disque, pas un flux (la question initiale n'a pas spécifié de flux, donc à cet égard c'est une réponse viable). Malheureusement, pour les tailles de fichiers supérieures à 2 ^ 32-1 octets, la taille non compressée est montrée modulo 2 ^ 32 et n'est donc pas fiable.
dd recherche = 10g if = / dev / zéro de = out.dat compte = 0 code> est plus pratique pour la plupart des systèmes de fichiers