从tar.gz文件中读取而不保存解压缩版本

tom*_*omr 3 ruby gzip tar ruby-on-rails-4

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

File structure:
base_folder
  file_i_need.txt
  other_folder
  other_file
Run Code Online (Sandbox Code Playgroud)

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

def self.open_file(file)
    uncompressed_file = Gem::Package::TarReader.new(Zlib::GzipReader.open(file))
uncompressed_file.rewind
end
Run Code Online (Sandbox Code Playgroud)

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

<Gem::Package::TarReader:0x007fbaac178090>
Run Code Online (Sandbox Code Playgroud)

我可以在条目上运行命令.我还没弄明白如何打开一个条目并从中读取而不保存它解压缩到磁盘.我主要需要文本文件中的字符串.

任何帮助赞赏.我可能只是遗漏了一些东西......

Ale*_*kin 6

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
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.