从压缩 tar 存档中包含的多个 zip 文件中提取所有内容

从压缩 tar 存档中包含的多个 zip 文件中提取所有内容

我收到一个tar.gz打包多个zip文件的文件 - 复制如下:

$ rm -Rf zipdir; mkdir zipdir; echo foo > zipdir/a.txt; echo bar > zipdir/b.txt; cd zipdir; zip -m a.zip a.txt ; zip -m b.zip b.txt; cd ..; tar -czvf zipdir.tar.gz zipdir

$ tar tzfO zipdir.tar.gz
zipdir/
zipdir/a.zip
zipdir/b.zip

$ tar xzfO zipdir.tar.gz --no-anchored a.zip | gunzip -c
foo
$ tar xzfO zipdir.tar.gz --no-anchored b.zip | gunzip -c
bar

由于某种原因,使用gunzip(或zcat -r) 提取会在第一个文件处停止。不处理后续文件:

$ tar xzfO zipdir.tar.gz | gunzip -c
foo

如何连接内容全部从 STDOUT 传输的 zip 文件?

$ tar xzfO zipdir.tar.gz | ?
foo
bar

答案1

使用 GNU tar

$ zcat zipdir.tar.gz | tar x --to-command='zcat $TAR_FILENAME'
bar
foo

这不会解压原始文件tar.gz并将每个 zip 文件的内容提取到标准输出。 (我在 tar 中的顺序是相反的,因此是barbefore foo。)

相关内容