【问题标题】:GUNZIP / Extract file "portion by portion"GUNZIP / 提取文件“部分”
【发布时间】:2010-05-07 03:56:47
【问题描述】:

我在一个磁盘空间有限的共享服务器上,我有一个 gz 文件,它可以超级扩展成一个巨大的文件,比我拥有的要多。如何通过“部分”提取“部分”(假设一次 10 MB),并处理每个部分,甚至暂时不提取整个内容!

不,这只是一个超大压缩文件,请不要一组文件...


嗨,大卫,您的解决方案看起来很优雅,但如果我准备好了,似乎每次 gunzip 从文件开头提取(并且该输出被丢弃)。我确信这会对我所在的共享服务器造成巨大压力(我认为它根本不是“预读”) - 你对我如何让 gunzip “跳过”必要的数字有任何见解吗?块?

【问题讨论】:

标签: shell compression gzip gunzip


【解决方案1】:

如果您使用 (Unix/Linux) shell 工具执行此操作,您可以使用 gunzip -c 解压缩到标准输出,然后使用 ddskipcount 选项仅复制一个块。

例如:

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

然后skip=1,skip=2,等等

【讨论】:

  • 优秀的洞察力大卫 - 这不是我想要的,但我会接受它......
【解决方案2】:

不幸的是,我不知道现有的 Unix 命令可以完全满足您的需求。您可以使用任何语言的小程序轻松完成,例如在 Python 中,cutter.py(当然,任何语言都可以):

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 将在文件fifthone 中放入正好一百万字节,跳过未压缩流中的前四百万字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2016-11-19
    • 2023-01-25
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多