curl télécharger plusieurs fichiers avec la syntaxe d'accolade


17

J'essaie de télécharger deux fichiers par la syntaxe suivante:

curl -O http://domain/path/to/{file1,file2}

Le problème est que seul le premier fichier est réellement enregistré localement, et le second a été simplement imprimé sur stdout.

Je me suis rendu compte que si j'ajoute un -Oça marche très bien:

curl -OO http://domain/path/to/{file1,file2}

Mais n'est-ce pas impossible si le nombre de fichiers augmente trop? Par exemple,

curl -O http://domain/path/to/file[1,100]

Ma question est, est-il vraiment impossible de télécharger plusieurs fichiers individuels à la fois avec curl(sans en ajouter un nombre correct -O)?


1
Pourquoi ne pas utiliser une boucle for ou utiliser wget à la place?
Rui F Ribeiro

1
@RuiFRibeiro (1) Oui, je peux utiliser la boucle. Je suis simplement curieux de savoir si je peux curly arriver. (2) Je ne considère pas seulement les protocoles HTTP, FTP, par exemple SFTP.
Naitree

Je veux dire, étant un outil si puissant, pourquoi curléchoue-t-il à cette fonctionnalité pas si difficile?
Naitree

1
Juste pour préciser que la syntaxe {}and [](et aussi *and ?) est la globalisation / expansion du shell , curlne les voit jamais, c'est la même chose quecurl url1 url2
vonbrand

wget ne gère pas SSL
MikeW

Réponses:


9

Mise à jour: cela a été implémenté dans curl 7.19.0. Voir la réponse @Besworks.

Selon la page de manuel, il n'y a aucun moyen de conserver le nom de fichier d'origine sauf en utilisant plusieurs O´s. Vous pouvez également utiliser vos propres noms de fichiers:

curl http://{one,two}.site.com -o "file_#1.txt"

résultant en http://one.site.cométant enregistré file_one.txtet http://two.site.comenregistré dansfile_two.txt .

ou même plusieurs variables comme

curl http://{site,host}.host[1-5].com -o "#1_#2"

résultant en http://site.host1.comêtre enregistré sur site_1, http://host.host1.comêtre enregistré sur host_1et ainsi de suite.


Ou vous pourriez faire quelque chose commecurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan


0

Il existe une autre façon de télécharger plusieurs fichiers avec curl:

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

Remarque : l'espace obligatoire est utilisé pour délimiter différentes URL.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.