Tentativa persistente de retomar downloads com curl

15

Eu estou em um mac e tenho uma lista de arquivos que eu gostaria de baixar de um servidor ftp. A conexão é um pouco problemática, então quero que ela tente novamente e continue se a conexão for interrompida.

Eu sei que posso fazer isso com o wget, mas infelizmente o Mac OS X não vem com o wget. Eu poderia instalá-lo, mas para fazer isso (a menos que eu tenha perdido alguma coisa) eu preciso instalar o XCode e o MacPorts primeiro, o que eu gostaria de evitar.

Curl está disponível embora pareça, mas não sei como isso funciona ou como usá-lo realmente. Se eu tiver uma lista de arquivos em um arquivo de texto (um caminho completo por linha, como ftp: // usuário: pass @ server / dir / file1 ) como posso usar o curl para baixar todos esses arquivos? E posso ficar sem nunca desistir? Como, tente novamente infinitamente e retome os downloads de onde parou e tal?

    
por Svish 18.05.2010 / 14:37

2 respostas

18

Depois de pesquisar e ler sobre o assunto por algum tempo, descobri uma solução que funcionou para mim:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30] irá fazer o download de 30 arquivos chamados file01.ext, file02.ext e assim por diante
  • --user user:pass deve ser óbvio
  • -O para saída para arquivos com nome original
  • --retry 999 para tentar novamente 999 vezes
  • --retry-max-time 0 para evitar que o tempo limite os retrys. O comportamento padrão, se você não especificar um atraso fixo --retry, é dormir primeiro um segundo entre as tentativas, depois dobrando isso, até atingir 10 min. entre novas tentativas
  • -C - para continuar onde caiu (se você executar o comando novamente). O traço depois diz para descobrir onde retomar de

Se alguém souber como obter os nomes de arquivos de um arquivo, informe-nos.

Na página man, ele diz o seguinte:

--url <URL>
Specify a URL to fetch. This option is mostly handy when you want to specify URL(s) in a config file.

Parece que isso pode ser algo, mas não entendo como seria usado ...

    
por 18.05.2010 / 15:35
2

Você pode usar a opção -K para curl para especificar um arquivo de configuração. Nesse caso, você usa a sintaxe:

optionname=<value>

Se você tiver um arquivo contendo uma lista de URLs, poderá usar curl como este:

sed 's/\(.*\)/-O\nurl=/g' url_list.txt | curl -K -

que transforma uma lista de URLs, como:

http://host1.com/foo.html
http://host2.com/bar.html

em um formato como este:

-O
url=http://host1.com/foo.html
-O
url=http://host2.com/bar.html

O Curl lê isso e interpreta cada uma dessas opções semelhantes.

HTH

Adam

    
por 24.08.2012 / 20:11