Tentativa persistente de retomar downloads com curl

17

Estou em um mac e tenho uma lista de arquivos que gostaria de baixar de um servidor ftp. A conexão é um pouco problemática, então quero que 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), preciso instalar o XCode e o MacPorts primeiro, o que eu gostaria de evitar.

Parece que o Curl está disponível, 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: // user: pass @ server / dir / file1 ) como posso usar o curl para baixar todos esses arquivos? E posso me enrolar para nunca desistir? Como, tente repetidamente infinitamente e retome os downloads de onde parou e tal?

Svish
fonte

Respostas:

20

Depois de pesquisar no Google e ler um livro por um 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] vai fazer o download de 30 arquivos chamados file01.ext, file02.ext e assim por diante
  • --user user:pass deveria ser óbvio
  • -O para saída para arquivos com nome original
  • --retry 999 repetir 999 vezes
  • --retry-max-time 0para impedir que o tempo limite seja repetido. O comportamento padrão, se você não especificar um --retry-delay fixo, é dormir primeiro um segundo entre as tentativas e depois duplicá-lo, até atingir 10 min. entre tentativas
  • -C -para fazê-lo continuar de onde caiu (se você executar o comando novamente). O traço depois diz-lhe para descobrir de onde retomar

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


Na página do manual, diz o seguinte:

--url <URL>
Especifique um URL para buscar. Essa opção é útil principalmente quando você deseja especificar URL (s) em um arquivo de configuração.

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

Svish
fonte
2

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

optionname=<value>

Se você possui um arquivo que contém uma lista de URLs, pode usar curl assim:

sed 's/\(.*\)/-O\nurl=\1/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

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

HTH,

Adão

ahawtho
fonte