Làm cách nào để giới hạn kích thước tệp được tải xuống trong wget?


13

Tôi muốn sử dụng wget(từ tập lệnh php) để tải xuống tệp hình ảnh, nhưng không muốn tải xuống tệp có kích thước nhất định.

Tôi có thể giới hạn kích thước tập tin với wget? Nếu không, cách tốt hơn là gì?

Câu trả lời:


14

Nếu bạn đang tải kịch bản, bạn nên xem xét sử dụng curlthay thế. Wget có thể phân tích đầu ra và tìm nạp đệ quy toàn bộ trang web, nhưng curl có nhiều tùy chọn hơn liên quan đến việc tải xuống thực tế của một tệp cụ thể. Đây là tùy chọn có liên quan trong trang man:

--max-filesize
Chỉ định kích thước tối đa (tính bằng byte) của tệp cần tải xuống. Nếu tệp được yêu cầu lớn hơn giá trị này, quá trình chuyển sẽ không bắt đầu và curl sẽ trở lại với mã thoát 63.
LƯU Ý: Kích thước tệp không phải lúc nào cũng được biết trước khi tải xuống và đối với các tệp như vậy, tùy chọn này không có hiệu lực ngay cả khi tệp chuyển kết thúc là lớn hơn giới hạn nhất định này.

Lưu ý về điều này chỉ làm việc cho một số tập tin là đáng xem xét. Máy khách phụ thuộc vào máy chủ để báo cáo mức độ lớn của tệp trước khi bắt đầu tải xuống. Hầu hết nhưng chắc chắn không phải tất cả các máy chủ báo cáo điều này.


6
Bạn có thể kết hợp điều này với giới hạn hệ thống để cấm curl tạo tệp lớn hơn $nbyte : (ulimit -f $(($n/512)); curl --max-filesize $n …). curlsẽ hủy bỏ với một lỗi nếu kích thước tệp vượt quá $n/512các khối 512 byte.
Gilles 'SO- đừng trở nên xấu xa'

Bạn cũng có thể bạn omerack.
Vi.

6

Nếu bạn muốn sử dụng wget, đây là một cách để kiểm tra kích thước của tệp mà không cần tải xuống:

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

Tất nhiên, $URLURL của tệp bạn muốn tải xuống ở đâu.

Vì vậy, bạn có thể điều kiện kịch bản của bạn dựa trên đầu ra. nhu la:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

để giới hạn kích thước tải xuống còn 20 MB.

(mã này là xấu, chỉ cho mục đích thông tin).


1

Dường như không có cách nào hợp lý để đặt kích thước tệp tối đa với wget.


2
Cách tiếp cận của Gilles với ulimit(xem bash(1), setrlimit(2)) cũng sẽ hiệu quả wget(1), mặc dù nó hơi nặng tay.
sarnold

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.