如何轻松提取嵌套的tar.gz文件?

8

我需要解压缩一个tar.gz文件,它大约有950mb。里面还有23个tar.gz文件,每个文件中又包含一个tar文件。我的问题是如何轻松地将它们全部解压缩?是否有可以使用的命令行工具?

结构如下:

foo.tar.gz
 ├───bar1.tar.gz
 │   ├───foobar1.tar
 ├───bar2.tar.gz
 │   ├───foobar2.tar
 ├───bar3.tar.gz
 │   ├───foobar3.tar
 ├───bar4.tar.gz
 │   ├───foobar4.tar
 ├───bar5.tar.gz
 │   ├───foobar5.tar
 ├───bar6.tar.gz
 │   ├───foobar6.tar
 |   ..........
 |   ..........
 |   ..........
 |   23 of them

提前感谢您。

3个回答

16

您可以使用--to-command参数将每个提取的文件传递到另一个程序(通过stdin)。在这种情况下,您将其传递给另一个从stdin读取数据的tar实例。

tar --to-command='tar -xzvf -' -xzvf foo.tar.gz

4
我最终手动提取了foo.tar.gz文件,并使用以下shell脚本提取那些bar*.tar.gz文件。
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
for next in *.tar.gz
    do
        echo "Untaring - $next"
        tar -xzf $next -C ~/foo
    done
exit 0

希望这能帮助到有需要的人。


尽管您的解决方案有效,如果您想了解为什么不应该像您这样使用ls的输出,请查看https://dev59.com/Y0rSa4cB1Zd3GeqPavvb#1956165……我觉得特别有趣的是那个问题中使用`find`命令的答案。 - James Morris

2

好的。

tar -xzOf foo.tar.gz bar1.tar.gz | tar -xO foobar1.tar

应该能行的。

当然,把它包装在一个小脚本中(或复制+粘贴23次^_^),你就大功告成了。 - David Wolever
如果你能解释一下为什么它没有起作用,我就更有可能告诉你哪里出了问题...但既然你已经解决了它,我想那也不太重要了。 - David Wolever
@StarCub:我猜你需要在某个地方再加一个 z,也许少一个 O。也许是这样的命令:tar -xzOf foo.tar.gz bar1.tar.gz | tar -xz foobar1.tar - Dennis Williamson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接