Điều này phù hợp với tôi:
$ xargs -n 1 curl -O < urls.txt
Tôi đang ở FreeBSD. Xargs của bạn có thể hoạt động khác nhau.
Lưu ý rằng điều này chạy các curl
s tuần tự , mà bạn có thể xem là nặng không cần thiết. Nếu bạn muốn tiết kiệm một số chi phí đó, những điều sau có thể hoạt động trong bash:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
Thao tác này sẽ lưu danh sách URL của bạn vào một mảng, sau đó mở rộng mảng với các tùy chọn để curl
tải xuống các mục tiêu. Các curl
lệnh có thể mất nhiều URL và lấy tất cả trong số họ, tái chế các kết nối hiện tại (HTTP / 1.1), nhưng nó cần các -O
tùy chọn trước mỗi một để tải về và tiết kiệm mỗi mục tiêu. Lưu ý rằng các ký tự trong một số URL] có thể cần được thoát ra để tránh tương tác với trình bao của bạn.
Hoặc nếu bạn đang sử dụng trình bao POSIX thay vì bash:
$ curl $(printf ' -O %s' $(cat urls.txt))
Điều này dựa vào printf
hành vi lặp lại mẫu định dạng để làm cạn kiệt danh sách các đối số dữ liệu; không phải tất cả độc lập printf
sẽ làm điều này.
Lưu ý rằng phương pháp không phải xargs này cũng có thể vượt quá giới hạn hệ thống đối với danh sách URL rất lớn. Nghiên cứu ARG_MAX và MAX_ARG_STRLEN nếu đây là mối quan tâm.
for i in $(cat urls.txt) ; do curl -O $i ; done