【问题标题】:How to count the number of files inside a tar.gz file (without decompressing)?如何计算 tar.gz 文件中的文件数(无需解压缩)?
【发布时间】:2014-06-28 22:17:34
【问题描述】:

我有一个由 pigz 制作的 tar.gz 文件(并行 gzip)。我想在不解压的情况下统计压缩文件中的文件数。

我使用这个命令:

tar -tzf file.tar.gz

但我得到了一个错误:

tar: This does not look like a tar archive
tar: Skipping to next header

是因为我使用 pigz 而不是 gzip 吗?如果是,我现在如何计算它们?

【问题讨论】:

  • 应该可以。您需要准确展示您是如何制作 .tar.gz 文件的。 pigz 与 gzip 在这里没有任何区别,假设它做得正确。
  • 对了,解压是必须的,你用tzf解压。也许您的意思是不存储结果文件。
  • pigzgzip 是相同压缩方案的两个实现,所以这不是问题。

标签: compression gzip tar


【解决方案1】:

由于它是一个 tar 和 gzip 存档,您应该使用 z 选项来使用 gzip。然后你可以简单地用wc计算行数。

tar -tzf file.tar.gz | wc -l

【讨论】:

  • 这个答案给出的文件数与 gzip -cd file.tar.gz | tar -tvv | grep -c ^- 相同,但速度是原来的两倍:8.5 分钟,而 6GB 存档为 17 分钟。
  • @cw' 不完全一样,它也计算文件夹,而不仅仅是文件
【解决方案2】:

您可以使用 tar -vv 详细选项两次以获得完整详细信息,然后 grep 文件权限中的第一个字符。 ^ 表示仅匹配第一个字符(行首)。 grep -c 选项计算行数。

drwxrwx--x   directory
lrwxrwxrwx   symlink
-rw-rw----   file

只计算常规文件

gzip -cd file.tar.gz | tar -tvv | grep -c ^-

【讨论】:

    【解决方案3】:

    我找到了解决办法!

    我对这些文件使用 unpigz 并将文件扩展名更改为 .tar 。之后我可以毫无问题地使用 tar -tzf 。

    谢谢!

    【讨论】:

    • 这意味着你错误地压缩了两次。如果tar -tzf 有效,那么该文件就是tar.gz 文件。正如我在评论中所说,您首先需要准确提供创建文件的方式。
    • 我做到了!我从“我有一个由 pigz(并行 gzip)制作的 tar.gz 文件”开始我的问题
    • 啊哈!对不起,这是我想念的理解。 tar czf - 文件夹 | pigz -9 -p 32 > file.tar.gz
    • 我就是这么想的。您正在压缩两次。您的错误是在tar 命令中使用了z。您正在使用带有 z 的 gzip 进行压缩,然后使用 pigz 进行第二次压缩。相反,您需要:tar cf - folder | pigz -9 -p 32 > file.tar.gz。这将只使用 pigz 而不是 gzip 压缩 一次,然后您的 tar -tzf 就可以工作了。
    猜你喜欢
    • 2011-10-30
    • 2013-04-27
    • 2011-11-01
    • 2018-06-26
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多