我想下载一个tar.gz
存档,解压缩它并zip
使用 bash 脚本在一个命令中将其压缩成一个文件。这样做的原因是独立于临时文件。
我使用的代码:
curl -L "someURL" | tar xOz --strip-components=1 | zip -@ test.zip
Run Code Online (Sandbox Code Playgroud)
给 STDOUT 提供了很多输出,所以我猜zip
是不接受管道。
也许我在这里遗漏了一些东西,但是 zip 的手册页没有给我提供比使用-@
或-
互联网更多的信息。
tar 会将所有文件数据发送到 stdout(但没有文件名)。
zip 不可能做任何理智的事情(除非在单个 zip 文件中创建一个包含所有文件内容的巨大 zip blob,我无法想象你想要那样)。
如果要创建文件的 zip 存档,则需要将文件解压到磁盘。
我想说的是,您也许能够循环遍历 tarball 中的条目(按名称)并将每个条目提取到管道(尽管就扫描 tarball 所需的次数而言,这将非常昂贵),但是我实际上没有看到,在 zip 的手册页中,我至少在这里找到了一种让 zip 压缩通过标准输入提供给它的数据的方法。它似乎只采用这种方式的文件名。