读取 tar.gz 中的文件名或文件数
Read the file names or the number of files in tar.gz
我有一个 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
}
读起来类似,但是是逐字符而不是逐行。
知道如何获取文件名列表或至少获取存档中的文件数吗?
您需要对未压缩的输出使用 tar reader。
".tar.gz" 表示应用了两个进程来生成文件。首先,一组文件 "tarred" 组成一个“.tar”文件,其中包含一系列(文件头块,未压缩的文件数据)单元。然后将其压缩为单个字节流,以生成“.tar.gz”。实际上,.tar 文件很可能从未存储在任何地方,而是作为字节流生成并动态压缩以直接写出 .tar.gz 文件。
要获取内容,您需要反转过程,解压缩,然后将结果提供给 tar reader 以解释文件头块并提取数据。同样,您可以解压缩并即时读取 tarred 文件内容,无需存储中间的 .tar 文件。
我有一个 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
}
读起来类似,但是是逐字符而不是逐行。
知道如何获取文件名列表或至少获取存档中的文件数吗?
您需要对未压缩的输出使用 tar reader。
".tar.gz" 表示应用了两个进程来生成文件。首先,一组文件 "tarred" 组成一个“.tar”文件,其中包含一系列(文件头块,未压缩的文件数据)单元。然后将其压缩为单个字节流,以生成“.tar.gz”。实际上,.tar 文件很可能从未存储在任何地方,而是作为字节流生成并动态压缩以直接写出 .tar.gz 文件。
要获取内容,您需要反转过程,解压缩,然后将结果提供给 tar reader 以解释文件头块并提取数据。同样,您可以解压缩并即时读取 tarred 文件内容,无需存储中间的 .tar 文件。