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)?


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.


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.