Curl

具有多個範圍的 cURL 下載

  • January 17, 2018

我正在嘗試使用 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.mp302ep1.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網站的問題,這在那裡不起作用。

引用自:https://unix.stackexchange.com/questions/215011