【问题标题】:Read from a tar.gz file without saving the unpacked version从 tar.gz 文件中读取而不保存解压版本
【发布时间】:2015-05-20 16:27:21
【问题描述】:

我有一个 tar.gz 文件保存在磁盘上,我想把它打包保存在那里,但我需要在存档中打开一个文件,从中读取并在某处保存一些信息。

File structure:
base_folder
  file_i_need.txt
  other_folder
  other_file

代码(不多 - 我尝试了 10mio 不同的方式,这就是剩下的)

def self.open_file(file)
    uncompressed_file = Gem::Package::TarReader.new(Zlib::GzipReader.open(file))
uncompressed_file.rewind
end

当我在控制台中运行它时,我得到了

<Gem::Package::TarReader:0x007fbaac178090>

我可以在条目上运行命令。我只是还没弄清楚如何打开一个条目并从中读取而不将其解压缩到磁盘。我主要需要文本文件中的字符串。

任何帮助表示赞赏。我可能只是错过了一些东西......

【问题讨论】:

  • TarReaderEnumerable,返回 Entry。所以,你需要uncompressed_file.detect { |f| f.fullname == 'base_folder/file_i_need.txt' }.read
  • 谢谢。完全有道理-不知道为什么我自己没有做到这一点。如果您想要积分作为答案发布:)
  • 既然问题解决了,我贴出来作为答案。

标签: ruby ruby-on-rails-4 tar gzip


【解决方案1】:

TarReaderEnumerable,返回 Entry

也就是说,可以通过文件名从文件中检索文本内容

uncompressed = Gem::Package::TarReader.new(Zlib::GzipReader.open(file))
text = uncompressed.detect do |f| 
  f.fullname == 'base_folder/file_i_need.txt'
end.read
#⇒ Hello, I’m content of the text file, located inside gzipped tar

希望对你有帮助。

【讨论】:

  • 非常感谢。我卡住了!
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多