我有一个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
}
其读取方式相似,但逐个字符而不是逐行读取。
知道如何获取文件名列表或至少是档案中的文件数吗?
答案 0 :(得分:1)
您需要在未压缩的输出上使用tar reader。
“。tar.gz”表示应用了两个进程来生成文件。首先,一组文件被“焦油化”以形成“.tar”文件,该文件包含一系列(文件头块,未压缩文件数据)单元。然后将其压缩为单个字节流,以制作“.tar.gz”。实际上,.tar文件很可能永远不会存储在任何地方,而是作为一个字节流生成并动态gzip直接写出.tar.gz文件。
要获取内容,请反转该过程,取消压缩,然后将其结果提供给tar阅读器以解释文件标题块并提取数据。同样,您可以动态地ungzip和读取tarred文件内容,而无需存储中间.tar文件。