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.