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ì?
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:
Nếu bạn đang tải kịch bản, bạn nên xem xét sử dụng curl
thay 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.
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, $URL
URL 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).
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.
ulimit
(xem bash(1)
, setrlimit(2)
) cũng sẽ hiệu quả wget(1)
, mặc dù nó hơi nặng tay.
wget có một -Q
--quota
tùy chọn giới hạn số lượng tải xuống tối đa khi một số URL (danh sách đệ quy hoặc danh sách đầu vào) được đưa ra.
https://www.gnu.org/software/wget/manual/html_node/Doad-Options.html
$n
byte :(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
sẽ hủy bỏ với một lỗi nếu kích thước tệp vượt quá$n/512
các khối 512 byte.