Continuar interrompido "curl" download

4

Estou baixando um arquivo grande pela rede. durante o download (digamos, a 40%), a máquina subjacente é desconectada da rede e antes da curl sair, a rede é conectada. Mas nessa situação, o curl não retoma o processo.

Eventualmente fica parado.

Quais são as opções para curl , o que me ajudará a retomar este download interrompido?

EDIT: Mais explicações para o problema

18:43:20 PM    SHW@SHW:/tmp # curl http://ip-address.com/BigFile
18:43:40 PM                   <Downloading in progress>
18:43:50 PM                   <Downloading in progress>
18:44:10 PM                   <network get disconnected>
18:44:20 PM                   <Downloading get stuck>
18:44:30 PM                   <Network get connected>
18:44:40 PM                   <DOWNLOAD MUST RESUME NOW>      <==

De acordo com o timestamp acima, quero que curl retome o download antes que curl abandone o processo iniciado. Eu não quero re-excutar o comando curl

    
por SHW 03.06.2016 / 13:09

1 resposta

9

você pode usar

curl -L -O --retry 999 --retry-max-time 0 -C - http://url
  • --retry 999 : repetindo tantas vezes
  • --retry-max-time 0 : evitar de tempo limite em tentar novamente

ou

curl -L -o 'filename' -C - http://url

Atualizar

export ec=18; while [ $ec -eq 18 ]; do /usr/bin/curl -O -C - "http://www.example.com/big-archive.zip"; export ec=$?; done

Explicação:

O mandril de curl de código de saída quando um download é interrompido é 18, e $? fornece o código de saída do último comando no bash. Portanto, embora o código de saída seja 18, continue tentando fazer o download do arquivo, mantendo o nome de arquivo (-O) e continuando onde o download anterior foi interrompido (-C) .

Minha preferência pessoal seria usar wget , que foi criado especificamente para esse caso de uso. Na página do manual:

Wget has been designed for robustness over slow or unstable network connections;
if a download fails due to a network problem, it will keep retrying until the
whole file has been retrieved.  If the server supports regetting, it will
instruct the server to continue the download from where it left off.

wget está disponível para quase todas as distribuições do Linux - provavelmente já está instalado no seu. Basta usar wget para baixar o arquivo, ele restabelecerá a conexão de rede até que o arquivo seja completamente transferido.

    
por 03.06.2016 / 13:45

Tags