Que tal:
for i in {1..52}; do curl -O 'printf "http://www.example.com/%02d_episode_%d.mp3" $i $i'; done
Estou tentando baixar uma série de episódios de podcast usando o cURL. Eu sei como usar um intervalo de números para baixar vários arquivos que correspondem a um padrão, mas o que não consigo descobrir é como ter vários intervalos em um único URL.
URLs de exemplo:
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
Se eu usar
curl -O http://www.example.com/[01-52]_episode_[1-52].mp3
Eu recebo arquivos assim:
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...
Mas a maioria deles obviamente não será válida.
Como posso usar o cURL para pegar os arquivos que eu quero? Ou talvez eu esteja tentando usar a ferramenta errada para o trabalho?
Isso está no OS X 10.10.3 e qualquer versão do cURL é instalada por padrão nessa plataforma.
Embora seja uma solução mais fraca para esse caso específico, é bastante útil em problemas semelhantes: curl
apresenta intervalo globbing. Eu tropecei neste tópico, então alguém poderia também.
curl http://www.example.com/[01-52]_episode_[1-52].mp3 -o "ep#1_#2.mp3"
find . type -f -empty -delete
Palavra de explicação:
curl
-o
em favor de -O
para usar o nome local e mostre o recurso #1 #2 ... #n
de salvar os arquivos enquanto usa o intervalo globbing em curl
. -o "#2.mp3"
, mas isso substituiria o arquivo! DLing 01ep1.mp3
e 02ep1.mp3
salva apenas 1.mp3
find
chamada está aqui desde que eu não sei o intervalo máximo find . -empty -delete
, que exclui arquivos vazios. Obviamente, devido ao problema mencionado anteriormente com o site example.com , isso não funcionará lá. Tags curl