Nouvelle tentative de reprise des téléchargements avec curl

17

Je suis sur un Mac et j'ai une liste de fichiers que je voudrais télécharger depuis un serveur ftp. La connexion est un peu boguée, je veux donc qu'elle réessaye et reprenne si la connexion est interrompue.

Je sais que je peux le faire avec wget, mais malheureusement Mac OS X n'est pas fourni avec wget. Je pourrais l'installer, mais pour ce faire (sauf si j'ai raté quelque chose), je dois d'abord installer XCode et MacPorts, ce que j'aimerais éviter.

Curl est disponible mais il me semble, mais je ne sais pas comment cela fonctionne ni comment l'utiliser vraiment. Si j'ai une liste de fichiers dans un fichier texte (un chemin complet par ligne, comme ftp: // user: pass @ server / dir / file1 ), comment puis-je utiliser curl pour télécharger tous ces fichiers? Et puis-je obtenir une boucle pour ne jamais abandonner? Comme, réessayez à l'infini et reprenez les téléchargements là où ils se sont arrêtés, etc.

Svish
la source

Réponses:

20

Après avoir googlé et lu un homme et ainsi de suite pendant un moment, j'ai trouvé une solution qui a fonctionné pour moi:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30] le fera télécharger 30 fichiers nommés file01.ext, file02.ext et ainsi de suite
  • --user user:pass devrait être évident
  • -O pour produire des fichiers avec le nom d'origine
  • --retry 999 réessayer 999 fois
  • --retry-max-time 0pour l'empêcher de temporiser les retrys. Le comportement par défaut si vous ne spécifiez pas --retry-delay fixe est de dormir d'abord une seconde entre les tentatives, puis de doubler cela jusqu'à ce qu'il atteigne 10 min. entre les tentatives
  • -C -pour le faire continuer là où il est tombé (si vous exécutez à nouveau la commande). Le tiret après lui indique de comprendre d'où reprendre

Si quelqu'un sait comment obtenir les noms de fichiers à partir d'un fichier, faites-le moi savoir.


Dans la page de manuel, il dit ce qui suit:

--url <URL>
Spécifiez une URL à récupérer. Cette option est surtout pratique lorsque vous souhaitez spécifier des URL dans un fichier de configuration.

On dirait que ça pourrait être quelque chose, mais je ne comprends pas très bien comment ça serait utilisé ...

Svish
la source
2

Vous pouvez utiliser l'option -K pour boucler pour spécifier un fichier de configuration. Dans ce cas, vous utilisez la syntaxe:

optionname=<value>

Si vous avez un fichier contenant une liste d'URL, vous pouvez utiliser curl comme ceci:

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

qui transforme une liste d'URL, comme:

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

dans un format comme celui-ci:

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

Curl lit cela et interprète chacune de ces options similaires.

HTH,

Adam

ahawtho
la source