15.8 顺序下载多个文件和因特网资源
curl
乍看之下,wget
和curl
很相像:二者都是用于非交互式地下载文件。不过,除了很多细微区别以外,它们各自都有一个与众不同的显著区别:curl
在指定要下载的链接时能够支持URL的序列或集合,而wget
则不能这样;同时,wget
支持递归下载,而curl
则没有这个功能。
说明 这两个程序还有许多其他区别。
curl
功能的完整列表,参见“Features What Can curl Do”(http://curl.haxx.se/docs/features.html),而有关wget的一些功能则可以参阅“Overview”(www.gnu.org/software/wget/manual/html_node/Overview.html#Overview)。cURL网站有一个对curl
和其他类似程序进行比较的图表“Compare cURL Features with Other FTP+HTTP Tools”(http://curl.haxx.se/docs/comparison-table.html),虽然这个图表提供了不少信息,但它明显有些偏向curl
(这也不奇怪)。
下面这个例子使用curl
下载指定的多个URL序列。National Public Radio(美国国家公共广播)的优秀节目This American Life将它播出的所有节目归档整理,并在其网站上提供Real Audio格式的下载(他们为什么选择Real格式,而不采用一种更开放的格式,确实是个谜)。如果想下载这些Real Audio文件中的10个,只需要使用以下命令:
$ curl -O http://www.wbez.org/ta/[1-10].rm
[1/10]: http://www.wbez.org/ta/1.rm --> 1.rm
--_curl_--http://www.wbez.org/ta/1.rm
注意,上面这个命令是如何使用[1-10].rm
来指定想要下载的1.rm
、2.rm
、3.rm
等文件的。如果WBEZ换了种命名方式,例如,将这些文件命名为one.rm
、two.rm
和three.rm
,那么应该使用成员集合的方式指定它们,如下所示:
$ curl -O http://www.wbez.org/ta/{one,two,three}.rm
-O
(或--remote-name
)选项是必需的。如果不使用它,curl
会将下载的信息输出到STDOUT,结果终端显示窗口内很快就塞满了一堆没有用的语言符号。-O
选项的作用就是让curl
把它下载的东西输出到一个文件,并用正在下载的文件名来作为本地文件的名称。
这里介绍了curl
的简单用法。虽然它的man page
没有wget
的那么长,但也提供了很多有用的信息。如果想发挥curl
的最大作用,应该阅读一下它们。考虑将这个man page
作为必读内容吧。