enrolar baixar vários arquivos com sintaxe cinta


17

Estou tentando baixar dois arquivos pela seguinte sintaxe:

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

O problema é que apenas o primeiro arquivo é realmente salvo localmente e o segundo foi simplesmente impresso no stdout.

Eu percebi que se eu adicionar um, -Oele funciona muito bem:

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

Mas isso não é prático se o número de arquivos aumentar muito? Por exemplo,

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

Minha pergunta é: realmente não há como baixar vários arquivos individuais de uma só vez curl(sem adicionar um número correto de -O)?


11
Por que não usar um loop for ou usar wget?
— Rui F Ribeiro

11
@RuiFRibeiro (1) Sim, eu posso usar loop. Só estou curioso curlpara conseguir. (2) Estou considerando não apenas HTTP (s), protocolos FTP, por exemplo, SFTP.
— Naitree

Quero dizer, sendo uma ferramenta tão poderosa, por que curlapenas falha nessa funcionalidade não tão difícil?
— Naitree

11
Apenas para deixar claro que o {}e [](e também *e ?sintaxe) é shell englobamento / expansão, curlnunca chega a vê-los, é o mesmo quecurl url1 url2
— vonbrand

O wget não lidar com SSL
— MikeW

Respostas:


9

Atualização: Isso foi implementado no curl 7.19.0. Consulte a resposta @Besworks.

De acordo com a página do manual, não há como manter o nome do arquivo original, exceto usando vários O's. Como alternativa, você pode usar seus próprios nomes de arquivo:

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

resultando em http://one.site.comserem salvos file_one.txte http://two.site.comsalvos em file_two.txt.

ou até várias variáveis ​​como

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

resultando em http://site.host1.comserem salvos site_1, http://host.host1.comsalvos host_1e assim por diante.


Ou você pode fazer algo comocurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
— Max Coplan


0

Existe uma maneira alternativa de baixar vários arquivos com curl:

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

Nota : o espaço obrigatório é usado para delimitar URLs diferentes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.