使用cURL 从命令行下载远程文件
目录:
强大的 curl 命令行工具可用于从几乎任何远程服务器下载文件。长期使用命令行的用户知道这在各种情况下都很有用,但为了简单起见,许多人会发现使用 curl 下载文件通常比使用 Web 浏览器或从 GUI 端的 FTP 客户端更快地替代Mac OS X(或 Linux)。这对本地情况很有帮助,但如果您需要在通过 SSH 连接时将某些内容下载到远程 Mac。
为了本演练的目的,我们将主要关注从两种常见的 HTTP 和 SFTP 协议下载文件,但应注意 cURL 支持更多协议。虽然curl很容易使用,但还是建议对命令行有一定的了解。
用curl -O下载精确匹配文件
使用带有curl的大写-O标志从远程服务器下载文件,同时保持准确的文件名,基本语法如下:
curl -O
这意味着如果指定的URL文件名为“sample.zip”,它将以文件名“sample.zip”下载,如果文件名为“LongExampleFileNameForOSXDaily-v- 1-3-51-revision-515b12-自述文件。txt”在远程服务器上,它会在本地机器上保存这个确切的名称。较长的文件名通常使用 -o 标志而不是 -O 来更好地处理,我们将在稍后讨论。
普通读者可能还记得我们在解释如何从m3u流文件中提取实际音频内容时使用了curl -O命令。
使用curl开始任何下载都会显示传输百分比、下载时间和剩余时间以及传输速度。
屏幕截图提供了比下面粘贴的示例更好的表示,但它看起来像这样:
% 总计百分比接收百分比 % Xferd 平均速度时间时间时间当前下载上传总耗用左速度 100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k
With transfer speed showing you could redirect the output of curl to /dev/null and use it to test internet connection speed,但是wget命令更容易阅读和遵循传输栏,因此wget更好适合那个任务。
使用curl -o 以不同的名称保存远程文件
Using a lowercase -o flag will allow you to specify a different file name for the downloaded file to how it was named on the remote server. 使用小写字母 -o 标志将允许您为下载的文件指定一个不同于它在远程服务器上的命名方式的文件名。这有助于减少冗长的文件名或只是标记一些东西,以便更容易自己找到。一般语法为:
curl -o
例如,如果你想保存在Apple服务器上列出的iOS IPSW文件,而没有冗长的全名,你可以使用以下内容:
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,例如:
curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/许可证/lgpl-2.1.txt http://ftp.gnu.org/gnu/GNUinfo/Audio/index.txt
另一方面,如果要下载的文件名是递增命名,可以用括号指定下载范围,如:
curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1.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
请记住,当使用-u 并指定用户名和密码时,bash 历史记录将以明文形式存储密码,因此在大多数情况下不建议这样做。您可以通过在“curl”前面放置一个空格来解决这个问题。如果您不使用空格键作为命令前缀,为了安全起见,您可能希望之后清空命令历史记录。
Supported curl Protocols & Use Beyond HTTP & FTP
如前所述,cURL的用途远远超出了HTTP和FTP,因为curl手册页条目在描述中提到了额外的协议:
另外,你会发现curl还可以用于PUT和POST请求、cookies、代理、隧道、恢复下载,甚至抓取HTTP头信息或更改用户代理(有效欺骗)无需使用专用的网络浏览器。
与大多数命令行实用程序一样,您可以通过使用“man curl”命令调用相应的手册页来了解有关 curl 的更多信息。