使用 cURL 从命令行下载远程文件

使用 curl 下载 SSH。

为了本演练的目的,我们将主要关注从两种常见的 HTTP 和 SFTP 协议下载文件,但应注意 cURL 支持更多协议。虽然 curl 易于使用,但建议您了解一些命令行知识。

使用 curl -O 下载精确匹配文件

使用带有 curl 的大写 -O 标志从远程服务器下载文件,同时保持准确的文件名,基本语法如下:

curl -O [url]

这意味着如果指定的 URL 文件名为“sample.zip”,它将以文件名“sample.zip”下载,如果文件名为“LongExampleFileNameForOSXDaily-v-1-3-51”之类的巨大而复杂的名称-revision-515b12-readme.txt”在远程服务器上,它将在本地机器上使用该确切名称保存。较长的文件名通常使用 -o 标志而不是 -O 来更好地处理,我们将在稍后讨论。

普通读者可能还记得我们在解释如何从中提取实际音频内容时使用了 curl -O 命令一个 m3u 流媒体文件

使用 curl 开始任何下载都会显示传输百分比、下载时间和剩余时间以及传输速度。

使用 curl 下载文件

屏幕截图提供了比下面粘贴的示例更好的表示,但它看起来像这样:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload 总花费左速度
100 10505 100 10505 0 0 79741 0 --:--:-- -- :--:-- --:--:-- 142k

通过显示传输速度,您可以将 curl 的输出重定向到 /dev/null 并使用它来测试互联网连接速度,但是 wget 命令更易于阅读和遵循传输栏,因此 wget 更适合该任务。

使用 curl -o 以不同的名称保存远程文件

使用小写的 -o 标志将允许您为下载的文件指定一个不同于它在远程服务器上的命名方式的文件名。这有助于减少冗长的文件名或只是标记一些东西,以便更容易自己找到。一般语法是:

curl -o [shortname] [url]

例如,如果您想要保存您列出的 iOS IPSW 文件 在没有冗长全名的 Apple 服务器上,您可以使用以下内容:

curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5,3_7.0.4_11B554a_Restore.ipsw

这将下载“iPhone5,3_7.0.4_11B554a_Restore.ipsw”文件,但名称更短,更有意义“iPhone5C-704.ipsw”。

如果您不想将文件保存到当前工作目录,请将路径指定为文件名的一部分,如下所示:

curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg

使用 curl 同时下载多个文件

cURL 可以轻松地同时下载多个文件,您只需指定多个 URL,如下所示:

curl -O [URL 1] [URL 2] [URL 3]

对于不同名称的文件,或托管在不同服务器上的文件,或位于不同目录路径中的文件,请使用完整的 URL,例如:

<代码>curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/Licenses/lgpl-2.1.txt http:/ /ftp.gnu.org/gnu/GNUinfo/Audio/index.txt

另一方面,如果要下载的文件名是增量命名,可以用括号指定下载范围,如下:

curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1[1-3].txt

这将同时获取文件 fdl-1.1.txt、fd1-1.2.txt 和 fd1-1.3.txt,而无需指定每个唯一的 URL。当然,这仅在文件位于同一目录且位于同一域中时才有效。

使用 curl 进行身份验证

您还可以使用 -u 标志通过 cURL 进行身份验证:

curl -u user:pass -O ftp://remote_url/file-to-download.zip

请记住,bash history 将存储密码在指定用户名和密码的情况下使用 -u 时以纯文本形式显示,因此在大多数情况下不建议这样做。您可以通过在“curl”前面放置一个空格来解决这个问题。如果您不使用空格键作为命令前缀,您可能需要清空命令历史记录 之后为了安全。

支持的 curl 协议和使用超越 HTTP 和 FTP

如前所述,cURL 的使用远远超出了 HTTP 和 FTP,因为 curl 手册页条目在描述中提到了其他协议:

curl 是一种使用
支持的协议之一(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、
IMAPS、LDAP)从服务器传输数据或向服务器传输数据的工具、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、
TELNET 和 TFTP)。

此外,您会发现 curl 还可用于 PUT 和 POST 请求、cookie、代理、隧道、恢复下载,甚至 获取 HTTP 标头信息更改无需使用专用网络浏览器的用户代理(有效欺骗)。

与大多数命令行实用程序一样,您可以通过使用“man curl”命令调用相应的手册页来了解有关 curl 的更多信息。