具有多个范围的 cURL 下载

具有多个范围的 cURL 下载

我正在尝试使用 cURL 下载一系列播客剧集。我知道如何使用一系列数字来下载与某个模式匹配的多个文件,但我不知道如何在单个 URL 中拥有多个范围。

示例 URL:

http://www.example.com/01_episode_1.mp3
http://www.example.com/02_episode_2.mp3
http://www.example.com/03_episode_3.mp3
...
http://www.example.com/52_episode_52.mp3

如果我使用

curl -O http://www.example.com/[01-52]_episode_[1-52].mp3

我得到这样的文件:

01_episode_1.mp3
01_episode_2.mp3
01_episode_3.mp3
...
01_episode_52.mp3
02_episode_1.mp3
02_episode_2.mp3
02_episode_3.mp3
...
02_episode_52.mp3
03_episode_1.mp3
03_episode_2.mp3
03_episode_3.mp3
...
03_episode_52.mp3
etc...

但其中大多数显然不是有效文件。

如何使用cURL抓取我想要的文件?或者也许我尝试使用错误的工具来完成这项工作?

这是在 OS X 10.10.3 上,并且该平台上默认安装了任何版本的 cURL。

答案1

虽然对于这种特殊情况的解决方案较弱,但它在类似问题中相当有用:curl功能范围通配。我偶然发现了这个线程,所以其他人也可能。

curl http://www.example.com/[01-52]_episode_[1-52].mp3 -o "ep#1_#2.mp3"
find . type -f -empty -delete

解释的话:

  • 使用 的curl范围通配功能
  • 这里比循环弱,因为有两个几乎相同实际上意味着相同的范围(除了第一个 - 中的前导零)。
  • 选择-o支持-O使用本地名称并显示#1 #2 ... #n在使用范围通配符时保存文件的功能curl
  • 您可以只选择第二个数字,-o "#2.mp3"但这会覆盖文件! DLing01ep1.mp302ep1.mp3保存1.mp3
  • 在 example.com 上进行测试将产生奇怪的结果,因为该页面总是回复 200 且相同的页面,正如您所知,这就是 IANA 的设置方式。
  • 功能文档:https://ec.haxx.se/cmdline-globbing.html
  • find呼叫在这里,因为我不知道最大范围
  • 这将保存所有文件:如果范围是[1-10]并且只有第1页和第2页,它将保存第3-9页(包括第3页和第2页)的空文件。因此:find . -empty -delete它删除空文件。显然,由于上述问题example.com网站这在那里不起作用。

答案2

怎么样:

for i in {1..52}; do curl -O `printf "http://www.example.com/%02d_episode_%d.mp3" $i $i`; done

相关内容