cURL download com vários intervalos

1

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.

    
por Patrick Wynne 10.07.2015 / 02:55

2 respostas

1

Que tal:

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

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:

  • Usa o recurso de intervalo de variação de curl
  • Mais fraco do que um loop aqui, já que existem dois intervalos quase idênticos que na verdade são idênticos (e com exceção dos zeros à esquerda no primeiro - são).
  • Escolha -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 .
  • Você poderia simplesmente escolher o segundo número com -o "#2.mp3" , mas isso substituiria o arquivo! DLing 01ep1.mp3 e 02ep1.mp3 salva apenas 1.mp3
  • O teste em example.com produzirá resultados peculiares, pois essa página sempre responde com 200 e a mesma página, apenas para você saber como a IANA a configurou.
  • Documentos de recursos: link
  • find chamada está aqui desde que eu não sei o intervalo máximo
  • Isso salva todos os arquivos: se o intervalo for [1-10] e houver apenas as páginas 1 e 2, ele salvará os arquivos vazios de 3 a 9 (ambos inclusivos). Portanto: find . -empty -delete , que exclui arquivos vazios. Obviamente, devido ao problema mencionado anteriormente com o site example.com , isso não funcionará lá.
por 17.01.2018 / 01:43

Tags