读取tar.gz中的文件名或文件数

时间:2015-01-19 08:26:23

标签: ruby gzip archive tar zlib

我有一个tar.gz文件,该文件包含多个已归档的csv文件。我需要读取文件名列表或至少读取文件数。

这就是我的尝试:

require 'zlib'

file = Zlib::GzipReader.open('test/data/file_name.tar.gz')
file.each_line do |line|
  p line
end

但这只打印csv文件中的每一行,而不是文件名。我也试过这个:

require 'zlib'

Zlib::GzipReader.open('test/data/file_name.tar.gz') { | f |
  p f.read
}

其读取方式相似,但逐个字符而不是逐行读取。

知道如何获取文件名列表或至少是档案中的文件数吗?

1 个答案:

答案 0 :(得分:1)

您需要在未压缩的输出上使用tar reader

“。tar.gz”表示应用了两个进程来生成文件。首先,一组文件被“焦油化”以形成“.tar”文件,该文件包含一系列(文件头块,未压缩文件数据)单元。然后将其压缩为单个字节流,以制作“.tar.gz”。实际上,.tar文件很可能永远不会存储在任何地方,而是作为一个字节流生成并动态gzip直接写出.tar.gz文件。

要获取内容,请反转该过程,取消压缩,然后将其结果提供给tar阅读器以解释文件标题块并提取数据。同样,您可以动态地ungzip和读取tarred文件内容,而无需存储中间.tar文件。