有关如何解压缩管道zip文件的任何想法:
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip
我希望将文件解压缩到一个目录,就像我们以前用普通文件一样:
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | unzip -d ~/Desktop
答案 0 :(得分:28)
ZIP文件格式包括存档末尾的目录(索引)。该目录说明每个文件所在的归档中的位置,从而允许快速随机访问,而无需读取整个存档。
这在尝试通过管道读取ZIP存档时会出现问题,因为直到最后才访问索引,因此在文件完全读取之后无法正确提取单个成员,并且不再可用。因此,当通过管道提供存档时,大多数ZIP解压缩器都会失败,这似乎并不令人惊讶。
归档末尾的目录不是 only 位置,其中文件元信息存储在归档中。此外,出于冗余目的,各个条目还将此信息包含在本地文件头中。
虽然并非每个ZIP解压缩程序都会在索引不可用时使用本地文件头,但tar和cpio前端结束于libarchive(又名bsdtar和bsdcpio)可以并且在读取管道时这样做,意味着以下是可能的:
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | bsdtar -xvf- -C ~/Desktop
答案 1 :(得分:9)
wget -qO- -O tmp.zip http://downloads.wordpress.org/plugin/akismet.2.5.3.zip && unzip tmp.zip && rm tmp.zip
答案 2 :(得分:6)
虽然以下内容在bash中不起作用,但它可以在zsh中使用。由于许多zsh用户可能会在这里结束,因此它可能仍然有用:
unzip =( wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip )
答案 3 :(得分:5)
只需使用zcat
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | zcat >> myfile.txt
答案 4 :(得分:4)
我来看看funzip(http://www.info-zip.org/mans/funzip.html)。它的手册页注释,
...filter for extracting from a ZIP archive in a pipe
抱歉,我没有一个例子,但看起来它确实附带了Linux解压缩实用程序。
答案 5 :(得分:3)
BusyBox的unzip
可以使用stdin并提取所有文件。
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | busybox unzip -
unzip
后的破折号是使用标准输入作为输入。
您甚至可以
cat file.zip | busybox unzip -
但这只是unzip file.zip
的多余。
如果您的发行版默认使用BusyBox(例如Alpine),则只需运行unzip -
。
答案 6 :(得分:0)
转发my answer:
我编写了一个 Python (2.x) 脚本来对 ZIP 档案进行流式提取,您可以从这里获取它:https://raw.githubusercontent.com/pts/unzip_scan/master/unzip_scan.py。用法:cat file.zip | sh unzip_scan.py -
。