chi*_*bes 8 linux compression python bash pipe
目标是从 stdin 读取 zip 文件并解压缩到 stdout。
Funzip 有效并且是我正在寻找的解决方案,zip 包含一个文件,不幸的是,当压缩文件大小约为 1GB 或更大时,funzip 会失败:
funzip error: invalid compressed data--length error
Run Code Online (Sandbox Code Playgroud)
更新:我发现上述错误可能并不表示实际错误。比较两个未压缩的文件,一个是传统解压缩,另一个是通过管道使用 funzip(将上述错误写入 stderr),这些文件是相同的。我想保持这个开放,所以这可以被确认或报告。
使用python的相关解决方案: 解压缩通过管道飞入的文件
然而,这个输出被定向到一个文件。
小智 14
重新发布我的答案:
BusyBoxunzip可以接受标准输入并将所有文件提取到标准输出。例如,当您使用wgetas stdin 时,
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | busybox unzip -p -
Run Code Online (Sandbox Code Playgroud)
-p将文件提取到管道。后面的破折号是使用 stdin 作为输入。
你也可以,(就像之前的答案一样)
cat file.zip | busybox unzip -p -
Run Code Online (Sandbox Code Playgroud)
但这只是多余的unzip -p file.zip。
如果您的发行版默认使用 BusyBox(例如 Alpine),则只需运行unzip -p -.
使用bsdtar来自libarchive:
> curl 'https://example.com/some.zip' | bsdtar -xOf - | less
Run Code Online (Sandbox Code Playgroud)
只需使用zcat. 例如:
cat file.zip | zcat
请注意,在上面的示例中,第一部分 ( cat file.zip) 是多余的,因为您可以简单地发出zcat file.zip并获得相同的结果。我包含它只是为了表明zcat能够读取stdin