curl скачать несколько файлов с синтаксисом скобки


17

Я пытаюсь скачать два файла по следующему синтаксису:

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

Проблема в том, что только первый файл фактически сохраняется локально, а второй просто выводится на стандартный вывод.

Я понял, что, если я добавлю, -Oэто работает просто отлично:

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

Но разве это не практично, если количество файлов становится слишком большим? Например,

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

У меня вопрос, неужели нет способа загрузить несколько отдельных файлов одновременно curl(без добавления правильного количества -O)?


1
Почему бы не использовать цикл for или использовать вместо него wget?
Руи Ф Рибейро

1
@RuiFRibeiro (1) Да, я могу использовать цикл. Мне просто любопытно, curlможно ли этого добиться. (2) Я рассматриваю не только HTTP (s), FTP протоколы, например SFTP.
Нейтри

Я имею в виду, что, будучи таким мощным инструментом, почему curlпросто не получается с такой несложной функциональностью?
Нейтри

1
Просто чтобы прояснить, что синтаксис {}и [](а также *и ?) - это глобализация / расширение оболочки , он curlникогда их не увидит, он такой же, какcurl url1 url2
vonbrand

wget не обрабатывает SSL
MikeW

Ответы:


9

Обновление: это было реализовано в curl 7.19.0. Смотрите ответ @Besworks.

Согласно справочной странице, нет способа сохранить исходное имя файла, кроме как с помощью нескольких символов. В качестве альтернативы вы можете использовать свои собственные имена файлов:

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

в результате чего http://one.site.comсохраняются file_one.txtи http://two.site.comсохраняются в file_two.txt.

или даже несколько переменных, таких как

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

в результате чего http://site.host1.comсохраняются в site_1, http://host.host1.comсохраняются в host_1и так далее.


Или вы могли бы сделать что-то вродеcurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Макс

23

Я понимаю, что на этот вопрос уже есть принятый ответ, но я чувствую, что должен указать, что на самом деле есть способ сделать это.

--remote-name-allОпция говорит завиток вести себя , как если бы вы использовали -Oили --remote-nameдля каждого файла.

https://curl.haxx.se/docs/manpage.html#--remote-name-all

Эта опция была доступна с версии 7.19.0

https://curl.haxx.se/changes.html#7_19_0


0

Существует альтернативный способ загрузки нескольких файлов с помощью curl:

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

Примечание . Обязательное пространство используется для разделения различных URL-адресов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.