curl tải xuống nhiều tập tin với cú pháp cú đúp


17

Tôi đang cố tải xuống hai tệp theo cú pháp sau:

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

Vấn đề là chỉ có tệp đầu tiên thực sự được lưu cục bộ và tệp thứ hai chỉ được in ra thiết bị xuất chuẩn.

Tôi nhận ra rằng nếu tôi thêm -Onó sẽ hoạt động tốt:

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

Nhưng điều này không thực tế nếu số lượng tệp phát triển quá lớn? Ví dụ,

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

Câu hỏi của tôi là, thực sự không có cách nào để tải xuống nhiều tệp riêng lẻ cùng một lúc curl(mà không thêm một số chính xác -O)?


1
Tại sao không sử dụng vòng lặp for hoặc sử dụng wget thay thế?
Rui F Ribeiro

1
@RuiFRibeiro (1) Có, tôi có thể sử dụng vòng lặp. Tôi chỉ tò mò nếu curlcó thể đạt được nó. (2) Tôi đang xem xét không chỉ HTTP (s), các giao thức FTP, ví dụ SFTP.
Naitree

Ý tôi là, là một công cụ mạnh mẽ như vậy, tại sao curllại thất bại ở chức năng không quá khó này?
Naitree

1
Chỉ cần làm rõ rằng {}[](và cũng *?cú pháp) là vỏ globbing / mở rộng, curlkhông bao giờ được nhìn thấy họ, nó cũng giống nhưcurl url1 url2
vonbrand

wget không xử lý SSL
MikeW

Câu trả lời:


9

Cập nhật: Điều này đã được thực hiện trong curl 7.19.0. Xem câu trả lời @Besworks.

Theo trang man, không có cách nào để giữ tên tệp gốc ngoại trừ sử dụng nhiều O hè. Ngoài ra, bạn có thể sử dụng tên tệp của riêng bạn:

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

dẫn đến http://one.site.comđược lưu vào file_one.txthttp://two.site.comđược lưu vào file_two.txt.

hoặc thậm chí nhiều biến như

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

dẫn đến http://site.host1.comđược lưu vào site_1, http://host.host1.comđược lưu vào host_1và như vậy.


Hoặc bạn có thể làm một cái gì đó nhưcurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan

23

Tôi nhận ra rằng đã có một câu trả lời được chấp nhận cho câu hỏi này nhưng tôi cảm thấy tôi nên chỉ ra rằng thực sự có một cách để làm điều này.

Các --remote-name-alltùy chọn cho curl để cư xử như thể bạn sử dụng -Ohoặc --remote-namecho mỗi file.

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

Tùy chọn này đã có sẵn kể từ phiên bản 7.19.0

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


0

Có một cách khác để tải xuống nhiều tệp với curl:

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

Lưu ý : không gian bắt buộc được sử dụng để phân định các URL khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.