curl scarica più file con la sintassi del controvento


17

Sto cercando di scaricare due file con la seguente sintassi:

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

Il problema è che solo il primo file viene effettivamente salvato localmente e il secondo è stato semplicemente stampato su stdout.

Mi sono reso conto che se aggiungo un -Ofunziona perfettamente:

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

Ma non è poco pratico se il numero di file diventa troppo grande? Per esempio,

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

La mia domanda è: non c'è davvero modo di scaricare più singoli file contemporaneamente curl(senza aggiungere un numero corretto di -O)?


1
Perché non usare un ciclo for o usare invece wget?
Rui F Ribeiro,

1
@RuiFRibeiro (1) Sì, posso usare il loop. Sono solo curioso di sapere se curlriesco a raggiungerlo. (2) Sto prendendo in considerazione non solo HTTP (s), protocolli FTP, ad esempio SFTP.
Naitree,

Voglio dire, essendo uno strumento così potente, perché curlfallire in questa funzionalità non così difficile?
Naitree,

1
Giusto per chiarire che la sintassi {}e [](e anche *e ?) è guscio / espansione della shell , curlnon riesce mai a vederli, è la stessa dicurl url1 url2
vonbrand

wget non gestisce SSL
MikeW il

Risposte:


9

Aggiornamento: questo è stato implementato in curl 7.19.0. Vedi la risposta di @Besworks.

Secondo la pagina man non c'è modo di conservare il nome del file originale se non usando più O. In alternativa puoi usare i tuoi nomi di file:

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

con conseguente http://one.site.comsalvataggio file_one.txte http://two.site.comsalvataggio in file_two.txt.

o anche più variabili come

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

con conseguente http://site.host1.comsalvataggio site_1, http://host.host1.comsalvataggio in host_1e così via.


Oppure potresti fare qualcosa del generecurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan,


0

Esiste un modo alternativo per scaricare più file con arricciatura:

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

Nota : lo spazio obbligatorio viene utilizzato per delimitare URL diversi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.