Diviser le fichier gzip en fichiers gz plus petits sans recompresser


9

J'ai un gros fichier .gz. Je voudrais le diviser en 100 fichiers gzip plus petits, chacun pouvant être décompressé par lui-même. En d'autres termes: je ne cherche pas un moyen de découper le fichier .gz en morceaux qu'il faudrait reconstituer pour pouvoir le décompresser. Je veux pouvoir décompresser chacun des petits fichiers indépendamment.

Peut-on le faire sans recompresser tout le fichier?

Peut-on le faire si le fichier d'origine est compressé avec --rsyncable? («Répondez mieux au programme rsync en réinitialisant périodiquement la structure interne du flux de données compressé.» Des sons comme ces points de réinitialisation pourraient être de bons endroits pour se séparer et probablement ajouter un en-tête.)

Peut-il être fait pour n'importe quel autre format compressé? J'imagine que ce bzip2serait faisable - car il est compressé en blocs.


Avez-vous essayé le split -b?
George Vasiliou

3
@GeorgeVasiliou Cela n'entraînera pas de fichiers gzip plus petits qui peuvent être décompressés.
Ole Tange

La réponse à votre première question est non, cela a été traité dans Supprimer la dernière ligne du fichier gz . La réponse est probablement non avec la plupart des formats compressés, car ce que vous demandez va à l'encontre de la compression. Je pense que la réponse est également non, gzip --rsyncableétant donné que «gunzip ne peut pas faire la différence» (si vous pouviez trouver un endroit pour vous séparer, vous pourriez dire qu'il y a un endroit pour se séparer). Cela pourrait être faisable avec bzip2 en raison de sa fonction de blocage particulière.
Gilles 'SO- arrête d'être méchant'

Cela peut aider: stackoverflow.com/a/22628945/4941495 Laissez simplement le flux d'entrée standard être la sortie de gzip -d -c bigfile.gz.
Kusalananda

Sans recompression, ce serait effectivement possible avec un bzip2fichier. Ce serait faisable avec gzou xzseulement en compressant chaque morceau indépendamment, donc cela nécessiterait une recompression.
xhienne

Réponses:


0

Le fractionnement et la jointure du gros fichier fonctionnent, mais il est impossible de décompresser des morceaux du fichier compressé, car les informations essentielles sont distribuées à travers l'ensemble de données. Autrement; diviser le fichier non compressé et compresser les pièces individuelles. Vous pouvez maintenant décompresser chaque pièce. Mais pourquoi? Vous devez fusionner toutes les pièces décompressées avant de poursuivre le traitement.


1
Fait amusant: lorsque vous avez les parties compressées individuellement (à l'aide de gzipou xz), vous pouvez effectuer la concaténation et la décompression, ou la décompression et la concaténation. L'ordre n'a pas d'importance.
Kusalananda

Cela dépend peut-être des données. Si vous divisez et compressez des images de disque, vous avez la possibilité de récupérer des parties du système de fichiers. Si vous compressez d'abord, puis divisez, vous n'avez définitivement aucune chance.
ingopingo

Non, et ce n'était pas ma prémisse non plus. Je viens de dire que l'ordre dans lequel vous effectuez la concaténation et la décompression lorsque vous avez des parties compressées individuellement n'a pas d'importance (cela est dû aux formats de fichiers compressés). Si vous compressez d'abord, puis que vous vous divisez, vous devez évidemment recombiner d'abord.
Kusalananda

Oh c'est cool. Cela fonctionne, même si chaque partie contient un en-tête de fichier individuel!
ingopingo le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.