使用curl命令下载包含ZIP文件的压缩文件


错误信息是什么? - David Foerster
还有其他人看到在下载一个包含zip命令的压缩文件时的讽刺吗?所以一旦你下载了它,你可以在压缩文件内使用zip命令来解压你需要解压的zip命令。好吧,很酷;) - Christopher Thomas
8个回答

我使用了curl -LO,它很好用。 wget 也可以。


对我来说很有效。使用的是Windows 7。 - fedmich
在 Windows 11 上使用 curl v8.0.1 对我有效。 - Jan
在Windows 10的wsl Linux子系统中,我也使用wget工作了。 - Miguel Gonzalez
L标志用于跟随重定向:-L, --location 跟随重定向 - undefined

尝试使用wget而不是curl:wget http://github.com/ziyaddin/xampp/archive/master.zip

3能不能解释一下给负评的人?还是另一个发帖者? - don.joey
10你能解释为什么用wget而不是curl吗? - Jorge Bucaran
1较少的命令行(如果你在意)- 这意味着较少的选项,不过最大的区别是wget支持递归下载。 - Ran Davidovitz
不知道为什么,但是我在使用curl下载的文件上执行unzip时出现了错误,而在使用wget时却正常工作。 - Dinei
@Dinei 你需要尝试一下 curl -OL <URL>,我加上了 -L 后问题就解决了。 - Mark

您可以使用:

curl https://github.com/ziyaddin/xampp/archive/master.zip -O -J -L

保存为:xampp-cli-master.zip
  • 如果发现重定向,请使用-L
  • 对于远程文件名(master.zip),请使用-O
  • 使用-J(与-O一起使用)允许远程头文件名(xampp-cli-master.zip)。


或者使用-o创建自己的文件名:

curl https://github.com/ziyaddin/xampp/archive/master.zip -L -o MyFilename.zip

保存为:MyFilename.zip

注意:(GitHub支持SSL - 使用https://


你也可以使用 curlrc 配置文件 或者将 CURL 命令设置为 curl -O -L,使其类似于 WGET 的工作方式。

请参考:https://curl.haxx.se/docs/manpage.html#OPTIONS (参见:-O-J-L-o

请注意使用带有 -J 选项的 CURL 的警告:

提供的文件名中尚未尝试解码百分比序列,因此此选项可能会给您带来意想不到的文件名。 警告:在使用此选项时,请谨慎行事,特别是在Windows系统上。恶意服务器可能会发送DLL或其他文件的名称,这些文件有可能被Windows或某些第三方软件自动加载。

1哈哈,这个胜出了,只因为你可以做J.Lo卷曲:curl -JLO ... - undefined
@icc97 哈哈哈。我从来没有想过,这样可能更容易记住呢。 - undefined

如果你想下载文件,请使用wget [option]... [URL]...代替。
要获取更多关于选项的信息,请在终端中输入:man wget 针对你的目的: wget http://github.com/ziyaddin/xampp/archive/master.zip 请注意,.zip文件将保存在当前所在的目录中。

1解释使用wget而不是curl的优势会很有帮助。对于任何想了解这两者之间区别的人,请参考此处 - Jorge Bucaran
@JorgeBucaran 我读了curl的作者写的比较,他也在wget中扮演了一个次要的角色。根据我的一次小项目,有一个明显的遗漏是wget比curl快10倍(<2秒 vs. 12秒),从https://www.timeanddate.com获取日出和日落时间。 - WinEunuuchs2Unix
有时候当你使用wget下载文件时,如果文件不是直接提供的,而是通过URL告诉一个服务去定位和提供文件,你最终下载到的可能是一个HTML文件。所以对于某些文件来说,curl更好用一些。 - lesolorzanov

要在GitHub(或任何其他进行重定向的网站)上使用curl下载文件,您必须传递-L(跟随重定向),所以使用以下命令:
curl -L http://github.com/ziyaddin/xampp/archive/master.zip -o xampp.zip

"curl -LOk" 使用不安全的协议(-k),禁用 SSL 证书检查(由于路径不匹配证书而失败),并使用远程服务器提供的文件名(-O)创建输出文件(同样不安全)。 在我看来,服务器最好配置本地重定向别名,以避免传递 URL 的这一非规范部分。但是,重定向仅使用 HTTP 重定向(HTTP 错误 30x),这会给 curl 造成问题,因为它默认不遵循这种(不安全的)重定向,而选项(-k)禁用了此安全检查。 因此,不要使用 HTTP 重定向(永久移动),请在服务器的文件系统上添加一些内部链接。如果需要这样做是因为实际上 URL 托管在另一个物理服务器上,它们之间没有直接访问权限,请为此主机使用另一个 DNS 名称,这样客户端将直接查询正确的主机,而无需任何重定向。 然后修复您的网页(您可以使用 Web 服务器日志查看返回 HTTP 30x 重定向的位置以及可能需要检查和更新的网页)。 强制客户端使用不安全/未经检查的协议不是一个好选择。
所以,这绝对是 Web 服务器非常糟糕的配置问题:尝试联系他们的管理员来解决这个问题。

使用选项-L来跟随重定向,你还可以使用--output选项来指定路径和文件名以生成zip文件。例如:
sudo curl -L https://github.com/CISOfy/lynis/archive/master.zip --output /etc/lynis.zip

注意:如果您没有权限写入目标文件夹,请使用sudo命令。

嗯,你也可以使用Axel。Axel是一个轻量级的命令行下载加速器。它支持HTTP、HTTPS、FTP和FTPS协议。这是一个不错且更快的替代方案。

安装Axel,请使用以下命令:

apt-get install axel

然后通过以下方式下载您的文件:
axel http://github.com/ziyaddin/xampp/archive/master.zip