使用大括号语法curl下载多个文件


17

我正在尝试通过以下语法下载两个文件:

curl -O http://domain/path/to/{file1,file2}

问题在于,实际上只有第一个文件保存在本地,而第二个文件只是简单地打印到stdout。

我确实意识到,如果我添加一个,-O它就可以正常工作:

curl -OO http://domain/path/to/{file1,file2}

但是,如果文件数量增加太多,这不切实际吗?例如,

curl -O http://domain/path/to/file[1,100]

我的问题是,真的没有办法一次下载多个单个文件curl(而没有添加正确数量的-O)?


1
为什么不使用for循环或使用wget代替呢?
Rui F Ribeiro

1
@RuiFRibeiro(1)是的,我可以使用循环。我很好奇curl能否实现。(2)我不仅在考虑HTTP,FTP协议,例如SFTP。
Naitree

我的意思是,作为一种功能强大的工具,为什么curl在这种不太硬的功能上失败了?
奈特里,2015年

1
只是为了清楚表明{}and [](以及and *?)语法是shell遍历/扩展,curl再也看不到它们了,它与curl url1 url2
vonbrand 2015年

wget无法处理SSL
MikeW

Answers:


9

更新:在curl 7.19.0中已实现。请参见@Besworks答案。

根据手册页,除了使用多个O之外,没有其他方法可以保留原始文件名。或者,您可以使用自己的文件名:

curl http://{one,two}.site.com -o "file_#1.txt"

导致http://one.site.com被保存到file_one.txthttp://two.site.com被保存到file_two.txt

甚至多个变量

curl http://{site,host}.host[1-5].com -o "#1_#2"

结果http://site.host1.com保存到site_1http://host.host1.com保存到host_1等等。


或者,您可以执行以下操作curl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan


0

还有一种使用curl下载多个文件的替代方法:

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

注意:必填空格用于分隔不同的URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.