Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何轻松提取嵌套的tar.gz文件?_Bash_Command Line_Extract - Fatal编程技术网

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

Bash 如何轻松提取嵌套的tar.gz文件?,bash,command-line,extract,Bash,Command Line,Extract,我需要解压缩tar.gz文件。大约950mb。它还有另外23个tar.gz文件。这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

我需要解压缩tar.gz文件。大约950mb。它还有另外23个tar.gz文件。这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
提前谢谢。

是的

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

应该可以了。

我最终手动提取了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
希望这将对某人有所帮助。

您可以使用
--to命令
参数将每个提取的文件传递给另一个程序(在stdin上)。在本例中,您将其传递给另一个从stdin读取数据的tar实例

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

当然,用一个小脚本(或复制+粘贴行23次),你应该是金色的。如果你能解释为什么它不起作用,我有更好的机会告诉你出了什么问题……但既然你已经解决了,我想这不太重要。@StarCub:我想你需要在那里的某个地方再放一个
z
,也许少放一个
O
。也许
tar-xzOf foo.tar.gz bar1.tar.gz | tar-xz foobar1.tar
虽然您的解决方案有效,但如果您想了解为什么不应该以您已有的方式使用ls的输出。。。我发现使用
find
命令的答案(对该问题)特别有趣。