Завантажити декілька файлів з синтаксисом дужок


17

Я намагаюся завантажити два файли за наступним синтаксисом:

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

Проблема полягає в тому, що лише перший файл фактично зберігається локально, а другий просто надрукується для stdout.

Я зрозумів, що якщо я додаю, -Oвін працює просто:

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

Але чи не це недоцільно, якщо кількість файлів зростає занадто великою? Наприклад,

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

Моє запитання: чи дійсно немає можливості завантажити одночасно декілька окремих файлів curl(без додавання правильної кількості -O)?


1
Чому б не використовувати цикл for або використовувати wget замість цього?
Rui F Ribeiro

1
@RuiFRibeiro (1) Так, я можу використовувати цикл. Мені просто цікаво, чи curlзможете цього досягти. (2) Я розглядаю не лише протоколи HTTP, протоколи FTP, наприклад SFTP.
Naitree

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

1
Просто для того, щоб зрозуміти, що синтаксис {}і [](а також *і ?) є глобулюванням / розширенням оболонки , їх curlніколи не побачити, це те саме, щоcurl url1 url2
vonbrand

wget не обробляє SSL
MikeW

Відповіді:


9

Оновлення: це було реалізовано в curl 7.19.0. Дивіться відповідь @Besworks.

Згідно з довідковою сторінкою немає жодного способу зберегти оригінальне ім'я файлу, окрім використання декількох символів O. Ви також можете використовувати власні імена файлів:

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параметр повідомляє curl поводитись так, ніби ви використовували -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.