curl unduh banyak file dengan sintaks brace

17

Saya mencoba mengunduh dua file dengan sintaks berikut:

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

Masalahnya adalah hanya file pertama yang benar-benar disimpan secara lokal, dan yang kedua hanya dicetak ke stdout.

Saya menyadari bahwa jika saya menambahkannya -Oberfungsi dengan baik:

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

Tapi bukankah ini tidak praktis jika jumlah file tumbuh terlalu besar? Sebagai contoh,

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

Pertanyaan saya adalah, apakah benar-benar tidak ada cara untuk mengunduh beberapa file sekaligus curl(tanpa menambahkan jumlah yang benar -O)?

Naitree
sumber
1
Mengapa tidak menggunakan for for loop atau menggunakan wget saja?
Rui F Ribeiro
1
@RuiFRibeiro (1) Ya, saya bisa menggunakan loop. Saya hanya ingin tahu apakah curlbisa mencapainya. (2) Saya mempertimbangkan tidak hanya HTTP, protokol FTP, misalnya SFTP.
Naitree
Maksud saya, menjadi alat yang sangat kuat, mengapa curlgagal pada fungsi yang tidak terlalu sulit ini?
Naitree
1
Hanya untuk memperjelas bahwa sintaks {}dan [](dan juga *dan ?) adalah shell globbing / ekspansi, curltidak pernah dapat melihatnya, itu sama dengancurl url1 url2
vonbrand
wget tidak menangani SSL
MikeW

Jawaban:

9

Pembaruan: Ini telah diterapkan di curl 7.19.0. Lihat jawaban @Besworks.

Menurut halaman manual tidak ada cara untuk menyimpan nama file asli kecuali menggunakan beberapa O's. Atau Anda bisa menggunakan nama file Anda sendiri:

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

menghasilkan http://one.site.comdiselamatkan file_one.txtdan http://two.site.comdiselamatkan file_two.txt.

atau bahkan beberapa variabel suka

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

mengakibatkan http://site.host1.comdiselamatkan site_1, http://host.host1.comdiselamatkan host_1dan sebagainya.

jschlichtholz
sumber
Atau Anda dapat melakukan sesuatu seperticurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan
23

Saya menyadari bahwa sudah ada jawaban yang diterima untuk pertanyaan ini, tetapi saya merasa saya harus menunjukkan bahwa sebenarnya ada cara untuk melakukan ini.

The --remote-name-allpilihan memberitahu curl untuk berperilaku seolah-olah Anda digunakan -Oatau --remote-nameuntuk setiap file.

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

Opsi ini telah tersedia sejak versi 7.19.0

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

Besworks
sumber
0

Ada cara alternatif untuk mengunduh banyak file dengan curl:

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

Catatan : ruang wajib digunakan untuk membatasi URL yang berbeda.

daGo
sumber