从ruby中的gzip中提取多个文件

时间:2015-06-19 18:17:49

标签: ruby-on-rails ruby gzip

实际上我在.gz文件中有多个.txt文件。我想从.gz文件中提取所有.txt文件...例如:

gz_extract = Zlib::GzipReader.open("sample.gz")
gz_extract.each do |extract|
  print extract
end

上面的代码实际上打印了.gz文件中存在的内容,但实际上我想取消gzip .txt文件。我希望你能理解这个问题......

1 个答案:

答案 0 :(得分:2)

  

实际上我在.gz文件中有多个.txt文件。我想从.gz文件中提取所有.txt文件。

gzip不能同时包含多个文件。它只适用于一个文件。

如果要压缩多个文件,首先需要将它们一起tar,然后gzip生成的.tar文件,这与您正在使用的文件不一致。

如果您可以使用您提供的代码阅读sample.gz的内容,这进一步证明您内部只有一个文件。您也可以从命令行尝试gunzip sample.gz再次证明它只包含一个文件。

修改

如果您希望代码输出未压缩的.txt文件:

output_file = File.open('sample.txt', 'w')

gz_extract = Zlib::GzipReader.open("sample.gz")
gz_extract.each_line do |extract|
  output_file.write(extract)
end

output_file.close