web-dev-qa-db-fra.com

Comment reprendre automatiquement le téléchargement interrompu en boucle?

Je travaille avec curl sous Linux. Je télécharge une partie d'un fichier sur le serveur ftp (en utilisant le -r option), mais ma connexion n'est pas bonne, elle interrompt toujours. Je veux écrire un script qui reprendra le téléchargement lorsque je me reconnecterai.

J'ai utilisé cette commande, mais cela ne fonctionne pas:

until curl -r 666-9999 -C - --retry 999 -o "path/to/file" "ftp:/path/to/remote/file"; do :; done
28
Bili the big
curl -L -O your_url

Cela téléchargera le fichier.

Supposons maintenant que votre connexion soit interrompue;

curl -L -O -C - your_url

Le téléchargement continuera à partir du dernier octet téléchargé

Depuis la page de manuel:

Utilisez "-C -" pour dire à curl de trouver automatiquement où/comment reprendre le transfert. Il utilise ensuite les fichiers de sortie/d'entrée donnés pour comprendre cela.

30
Kevin RED

wget a été spécialement conçu pour ce cas d'utilisation. Depuis la page de manuel:

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 disponible pour presque toutes les distributions Linux - il est probablement déjà installé sur le vôtre. Utilisez simplement wget pour télécharger le fichier, il rétablira la connexion réseau jusqu'à ce que le fichier soit complètement transféré.

13
sjaensch

Vous pouvez vérifier le code de sortie dans une boucle while et reprendre jusqu'à ce que le code de sortie indique que le téléchargement a réussi:

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

L'exemple est tiré de http://ilovesymposia.com/2013/04/11/automatically-resume-interrupted-downloads-in-osx-with-curl/

10
Claudio Floreani