如何计算另一个嵌套“.tar”文件中的“.tar”文件的数量(无需提取)?

如何计算另一个嵌套“.tar”文件中的“.tar”文件的数量(无需提取)?

有很多解决方案可以计算一个.tar文件中的文件数量。但我还没有找到一种无需提取就能计算.tar另一个文件中的文件数量的解决方案。.tar

例如:

  • big.tar 包含

    • 焦油
    • 焦油
    • 韓國

我可以提取big.tar它们tar -tvfa.tarb.tar我们想知道 Linux 上是否有更好的解决方案?

答案1

最简洁的答案是不。

正确的方法是这样的

$ tar -t -f <(tar -x -O -f big.tar a.tar) | wc -l

或者

$ tar -x -O -f big.tar a.tar | tar -t -f - | wc -l

这将从a.tar中提取big.tar,并将其直接提供给另一个tar进程,而无需先提取到文件。请注意,它仍在提取a.tar,只是没有写入磁盘。

可以tar一次性提取多个层,但是您必须编写一个程序来执行此操作,因为我认为还没有人编写过程序,而且这不是一项简单的任务。

编辑:如果您想计算所有子 tarball 中的文件数量,可以修改上述 shell 脚本:

tar -t -f big.tar | egrep '\.tar$' | while read f
do
    tar -t -f <(tar -x -0 -f big.tar "$f")
done | wc -l

或者使用 GNU Parallel:

tar -t -f big.tar | egrep '\.tar$' | parallel "tar -t -f <(tar -x -0 -f big.tar {})" | wc -l

相关内容