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, -O
ele 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
)?
curl
para conseguir. (2) Estou considerando não apenas HTTP (s), protocolos FTP, por exemplo, SFTP.curl
apenas falha nessa funcionalidade não tão difícil?{}
e[]
(e também*
e?
sintaxe) é shell englobamento / expansão,curl
nunca chega a vê-los, é o mesmo quecurl url1 url2
Respostas:
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:
resultando em
http://one.site.com
serem salvosfile_one.txt
ehttp://two.site.com
salvos emfile_two.txt
.ou até várias variáveis como
resultando em
http://site.host1.com
serem salvossite_1
,http://host.host1.com
salvoshost_1
e assim por diante.fonte
curl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Percebo que já existe uma resposta aceita para essa pergunta, mas acho que devo salientar que realmente existe uma maneira de fazer isso.
A
--remote-name-all
opção instrui a ondulação a se comportar como se você usasse-O
ou--remote-name
para cada arquivo.https://curl.haxx.se/docs/manpage.html#--remote-name-all
Esta opção está disponível desde a versão 7.19.0
https://curl.haxx.se/changes.html#7_19_0
fonte
Existe uma maneira alternativa de baixar vários arquivos com curl:
Nota : o espaço obrigatório é usado para delimitar URLs diferentes.
fonte