我有一个 zip/tar.gz,其中包含 zip 文件,而该文件又包含另一个 zip 文件。
例如:
1.zip contains 2.tar.gz and 3.zip.
3.zip contains 4.zip.
我只想从 1.zip 中提取 4.zip,我不想提取所有文件。
我怎样才能做到这一点?
答案1
这比看起来更难,因为unzip
无法从其标准输入中提取,因此您无法将其与管道链接。但是,jar
可以从其标准输入中提取 ZIP 存档funzip
(有一些限制)。
如果3.zip
仅有的contains4.zip
或 contains4.zip
作为其第一个成员,然后funzip
可以使用:
unzip -p 1.zip 3.zip | funzip > 4.zip
这用于从 中unzip
提取3.zip
的内容1.zip
,将它们通过管道传输到标准输出,在标准输出中funzip
提取4.zip
的内容,并将它们写入4.zip
。
jar
无论 的其他内容如何,都有效3.zip
:
unzip -p 1.zip 3.zip | jar x 4.zip
这会将3.zip
内容输入jar
并提取4.zip
。
funzip
一起运送unzip
;jar
是 Java 开发工具包的一部分,例如 openjdk-11-jdk-headless
在 Debian 10 上。