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
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.
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é.
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/