Curl
具有多個範圍的 cURL 下載
我正在嘗試使用 cURL 下載一系列播客劇集。我知道如何使用一系列數字來下載與模式匹配的多個文件,但我不知道如何在單個 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。
怎麼樣:
for i in {1..52}; do curl -O `printf "http://www.example.com/%02d_episode_%d.mp3" $i $i`; done
雖然對這種特殊情況的解決方案較弱,但它在類似問題中相當有用:
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.mp3
和02ep1.mp3
保存只是1.mp3
- 在 example.com 上進行測試會產生特殊的結果,因為該頁面總是回复 200 和相同的頁面,正如您所知,這就是 IANA 設置它的方式。
- 功能文件:https ://ec.haxx.se/cmdline-globbing.html
find
電話在這裡,因為我不知道最大範圍- 這將保存所有文件:如果範圍是$$ 1-10 $$並且只有第 1 頁和第 2 頁,它將為 3-9(包括)保存空文件。因此:
find . -empty -delete
刪除空文件。顯然,由於上述example.com網站的問題,這在那裡不起作用。