Seuls décomprimer un bloc bzip2 spécifique
-
19-09-2019 - |
Question
Dire que j'ai un fichier bzip2 (plus de 5 Go), et je veux décomprimer n ° x seul bloc, parce qu'il est là que mes données sont (bloc est différent à chaque fois). Comment puis-je faire?
Je pensais à faire un indice de l'endroit où tous les blocs sont, puis couper le bloc que j'ai besoin à partir du fichier et d'appliquer bzip2recover à lui.
J'ai aussi pensé à la compression dire 1Mo à un moment, puis annexant à un fichier (et l'enregistrement de l'emplacement), et saisissant simplement le fichier quand j'ai besoin, mais je préfère garder le fichier bzip2 d'origine intact.
Ma langue préférée est Ruby, mais la solution de toute langue est bien pour moi (aussi longtemps que je comprends le principe).
La solution
Il y a un http://bitbucket.org/james_taylor/seek-bzip2
Prenez la source, le compiler.
Exécuter avec
./seek-bzip2 32 < bzip_compressed.bz2
pour tester.
est le seul param déplacement de bit de tête du bloc demandé. Vous pouvez l'obtenir avec la recherche d'un « 31 41 59 26 53 59 » chaîne hexadécimale dans le fichier binaire. CE ERRONE. début du bloc peut être pas aligné sur la limite d'octet, donc vous devez rechercher tous les décalages de bits possibles de « 31 41 59 26 53 59 » chaîne hexagonale, comme cela se fait dans bzip2recover - http://www.bzip.org/1.0.3/html/recovering.html
32 est la taille binaire de « BZh1 » en-tête où 1 peut être un chiffre de « 1 » à « 9 » (en bzip2 classique) - il est une taille de bloc (non compressé) dans des centaines de kb (non exacte) <. / p>
Autres conseils
Il est vrai que bzip table est presque aussi lent que bien sûr, mais décompresser il vous suffit de le faire une fois et vous pouvez stocker la sortie d'une certaine façon à l'utiliser comme un indice. C'est parfait pour ce que je dois, mais peut-être pas ce que tout le monde a besoin.
Je l'ai besoin d'un peu d'aide pour à compiler sous Windows si.