Question

Je suis sur un serveur partagé avec l'espace disque restreint et j'ai un fichier gz que super prend son envol en un fichier énorme, plus que ce que j'ai. Comment puis-je extraire « partie » par « partie (10 Mo permet de dire à la fois), et traiter chaque partie, sans extraire même temporairement la chose!

Non, c'est juste un super grand fichier compressé, pas un ensemble de fichiers plaisir ...


Salut David, votre apparence solution tout à fait élégante, mais si je prépare les choses, il semble que tous les extraits gunzip de temps depuis le début du fichier (et la sortie de c'est jeté). Je suis sûr que va causer une pression énorme sur le serveur partagé je suis sur (je ne pense pas sa « lecture avant » du tout) - avez-vous des idées sur la façon dont je peux faire gunzip « sauter » le nombre nécessaire des blocs?

Était-ce utile?

La solution

Si vous faites cela avec des outils shell (Unix / Linux), vous pouvez utiliser gunzip -c pour décomprimer à stdout, puis utilisez dd avec les options de skip et count pour copier un seul morceau.

Par exemple:

gunzip -c input.gz | dd bs=10485760 skip=0 count=1 >output

puis sauter = 1, passez = 2, etc.

Autres conseils

Malheureusement, je ne sais pas d'une commande Unix existant qui fait exactement ce dont vous avez besoin. Vous pouvez le faire facilement avec un petit programme dans toutes les langues, par exemple en Python, cutter.py (toute langue ferait tout aussi bien, bien sûr):

import sys
try:
  size = int(sys.argv[1])
  N = int(sys.argv[2])
except (IndexError, ValueError):
  print>>sys.stderr, "Use: %s size N" % sys.argv[0]
  sys.exit(2)
sys.stdin.seek((N-1) * size)
sys.stdout.write(sys.stdin.read(size))

gunzip <huge.gz | python cutter.py 1000000 5 > fifthone va mettre dans le fichier fifthone exactement un million d'octets, en sautant les 4 premiers millions d'octets dans le flux non compressé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top