我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
如果我使用
curl -O http://www.example.com/[01-52]_episode_[1-52].mp3
Run Code Online (Sandbox Code Playgroud)
我得到这样的文件:
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...
Run Code Online (Sandbox Code Playgroud)
但其中大多数显然不是有效文件。
如何使用cURL抓取我想要的文件?或者也许我尝试使用错误的工具来完成这项工作?
这是在 OS X 10.10.3 上,并且该平台上默认安装了任何版本的 cURL。
虽然对于这种特殊情况的解决方案较弱,但它在类似问题中相当有用:curl功能范围通配。我偶然发现了这个线程,所以其他人也可能。
curl http://www.example.com/[01-52]_episode_[1-52].mp3 -o "ep#1_#2.mp3"
find . type -f -empty -delete
Run Code Online (Sandbox Code Playgroud)
解释的话:
curl的范围通配功能-o支持-O使用本地名称并显示#1 #2 ... #n在使用范围通配符时保存文件的功能curl。-o "#2.mp3"但这会覆盖文件!DLing01ep1.mp3并02ep1.mp3保存1.mp3find呼叫在这里,因为我不知道最大范围find . -empty -delete它删除空文件。显然,由于上述example.com网站的问题,这在那里不起作用。