curl descargar múltiples archivos con sintaxis de llaves


17

Estoy tratando de descargar dos archivos con la siguiente sintaxis:

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

El problema es que solo el primer archivo se guarda localmente y el segundo simplemente se imprimió en stdout.

Me di cuenta de que si agrego un -O, funciona bien:

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

¿Pero no es esto poco práctico si la cantidad de archivos crece demasiado? Por ejemplo,

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

Mi pregunta es, ¿realmente no hay forma de descargar varios archivos individuales a la vez con curl(sin agregar un número correcto de -O)?


1
¿Por qué no usar un bucle for o usar wget en su lugar?
— Rui F Ribeiro

1
@RuiFRibeiro (1) Sí, puedo usar loop. Solo tengo curiosidad si curlpuedo lograrlo. (2) Estoy considerando no solo HTTP (s), protocolos FTP, por ejemplo, SFTP.
— Naitree

Quiero decir, al ser una herramienta tan poderosa, ¿por qué curlsimplemente falla en esta funcionalidad no tan difícil?
— Naitree

1
Solo para dejar en claro que el {}y[] sintaxis (y también *y ?) es la expansión / expansión de shell , curlnunca llega a verlos, es lo mismo quecurl url1 url2
— vonbrand

wget no maneja SSL
— MikeW

Respuestas:


9

Actualización: Esto se ha implementado en curl 7.19.0. Ver la respuesta de @Besworks.

De acuerdo con la página del manual, no hay forma de mantener el nombre del archivo original, excepto el uso de múltiples O's. Alternativamente, podría usar sus propios nombres de archivo:

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

resultando en http://one.site.comser salvado file_one.txty http://two.site.comser salvado en file_two.txt.

o incluso múltiples variables como

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

resultando en http://site.host1.comser guardado en site_1, http://host.host1.comser guardado en host_1y así sucesivamente.


O podrías hacer algo comocurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
— Max Coplan


0

Hay una forma alternativa de descargar varios archivos con curl:

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

Nota : el espacio obligatorio se utiliza para delimitar diferentes URL.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.