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.