我收到一个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 中的顺序是相反的,因此是bar
before foo
。)