40

关于如何解压缩这样的管道 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
4

7 回答 7

50

ZIP 文件格式包括存档末尾的目录(索引)。该目录说明每个文件在存档中的位置,因此允许快速、随机访问,而无需读取整个存档。

当尝试通过管道读取 ZIP 存档时,这似乎会造成问题,因为索引直到最后才被访问,因此在文件被完全读取并且不再可用之前无法正确提取单个成员. 因此,大多数 ZIP 解压缩器在通过管道提供存档时都会失败,这似乎不足为奇。

存档末尾的目录不是文件元信息存储在存档中的唯一位置。此外,出于冗余目的,各个条目还在本地文件头中包含此信息。

虽然不是每个 ZIP 解压缩器都会在索引不可用时使用本地文件头,但 libarchive(又名 bsdtar 和 bsdcpio)的 tar 和 cpio 前端在通过管道读取时可以并且将会这样做,这意味着以下是可能的:

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | bsdtar -xvf- -C ~/Desktop
于 2014-04-16T11:35:59.160 回答
15

BusyBoxunzip可以采用标准输入并提取所有文件。

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 -.

于 2018-10-11T12:07:59.040 回答
11

只需使用 zcat

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | zcat >> myfile.txt
  • 这只会提取第一个文件。在提取第一个文件后,您将看到此错误消息“gzip:stdin has more than one entry--rest被忽略”。
于 2017-09-14T09:58:21.347 回答
10

虽然以下内容在 bash 中不起作用,但在 zsh 中将起作用。由于许多 zsh 用户可能会在这里结束,它可能仍然有用:

% unzip =( wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip )
Archive:  /tmp/zshLCod6x
   creating: akismet/
  inflating: akismet/admin.php       
  inflating: akismet/akismet.css     
  inflating: akismet/akismet.gif     
  inflating: akismet/akismet.js      
  inflating: akismet/akismet.php     
  inflating: akismet/legacy.php      
  inflating: akismet/readme.txt      
  inflating: akismet/widget.php      
% 

如您所见,临时下载的 zip 文件已被立即删除:

% ls /tmp/zshLCod6x
ls: cannot access '/tmp/zshLCod6x': No such file or directory
% 
于 2013-11-14T22:14:17.453 回答
6
wget -q -O tmp.zip http://downloads.wordpress.org/plugin/akismet.2.5.3.zip && unzip tmp.zip && rm tmp.zip
于 2011-08-22T03:22:20.670 回答
4

我会看看 funzip (http://www.info-zip.org/mans/funzip.html)。它的手册页指出,

...filter for extracting from a ZIP archive in a pipe

抱歉,我没有示例,但它看起来确实带有 Linux 解压缩实用程序。

于 2011-08-20T14:59:08.057 回答
0

转发我的答案

I wrote a Python (2.x) script to do streaming extraction of ZIP archives, you can get it from here: https://raw.githubusercontent.com/pts/unzip_scan/master/unzip_scan.py . Usage: cat file.zip | sh unzip_scan.py -.

于 2021-01-28T14:00:59.067 回答