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

Posted

技术标签:

【中文标题】读取 tar.gz 中的文件名或文件数【英文标题】:Read the file names or the number of files in tar.gz 【发布时间】:2015-01-19 08:26:23 【问题描述】:

我有一个 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

读起来类似,但逐个字符而不是逐行。

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

【问题讨论】:

使用这个 Zip 库。只需解压zip文件,统计解压目录下的文件数即可。 【参考方案1】:

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

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

要获取内容,您需要反转过程,解压缩,然后将结果提供给 tar 阅读器,以解释文件头块并提取数据。同样,您可以即时解压缩并读取 tar 文件内容,无需存储中间 .tar 文件。

【讨论】:

谢谢你,这真的很有帮助!欣赏它。

以上是关于读取 tar.gz 中的文件名或文件数的主要内容,如果未能解决你的问题,请参考以下文章

如何在水壶中解压缩和导入 .tar.gz 文件?

从 tar.gz 文件夹中读取 json 文件并转换为 pandas 数据框 [重复]

如何使用带有 gzip 压缩选项的 pandas read_csv 读取 tar.gz 文件?

java不解压tar.gz读取包里面的某个文件内容

java不解压tar.gz读取包里面的某个文件内容

如何只查看tar.gz压缩文件中顶层目录的列表