ฉันจะ จำกัด ขนาดไฟล์ที่ดาวน์โหลดใน wget ได้อย่างไร


13

ฉันต้องการใช้wget(จากสคริปต์ PHP) เพื่อดาวน์โหลดไฟล์ภาพ แต่ไม่ต้องการดาวน์โหลดไฟล์ในขนาดที่กำหนด

ฉันสามารถ จำกัด ขนาดไฟล์ด้วยได้wgetหรือไม่? ถ้าไม่เป็นวิธีที่ดีกว่าคืออะไร?

คำตอบ:


14

หากคุณดาวน์โหลดสคริปต์คุณควรพิจารณาใช้curlแทน Wget สามารถแยกวิเคราะห์ผลลัพธ์และเรียกทั้งไซต์ซ้ำ ๆ แต่ curl มีตัวเลือกเพิ่มเติมที่เกี่ยวข้องกับการดาวน์โหลดไฟล์จริง นี่คือตัวเลือกที่เกี่ยวข้องในหน้า man:

--max-filesize
ระบุขนาดสูงสุด (เป็นไบต์) ของไฟล์ที่จะดาวน์โหลด หากไฟล์ที่ร้องขอมีขนาดใหญ่กว่าค่านี้การถ่ายโอนจะไม่เริ่มขึ้นและจะกลับมาพร้อมกับรหัสออก 63
หมายเหตุ: ขนาดไฟล์นั้นไม่เคยรู้จักมาก่อนการดาวน์โหลดเสมอและสำหรับไฟล์ตัวเลือกนี้จะไม่มีผลแม้ว่าไฟล์ การถ่ายโอนสิ้นสุดลงว่ามีขนาดใหญ่กว่าขีด จำกัด ที่กำหนดนี้

หมายเหตุเกี่ยวกับการทำงานกับไฟล์บางไฟล์นั้นคุ้มค่าที่จะพิจารณา ไคลเอนต์ขึ้นอยู่กับเซิร์ฟเวอร์เพื่อรายงานว่าไฟล์มีขนาดใหญ่เพียงใดก่อนที่จะเริ่มดาวน์โหลด เซิร์ฟเวอร์ส่วนใหญ่ แต่ไม่แน่นอนทั้งหมดที่รายงานนี้


6
คุณสามารถรวมนี้กับขีด จำกัด ของระบบที่จะห้ามขดจากการสร้างไฟล์ที่มีขนาดใหญ่กว่าไบต์:$n จะยกเลิกพร้อมข้อผิดพลาดหากขนาดไฟล์เกินบล็อก 512 ไบต์ (ulimit -f $(($n/512)); curl --max-filesize $n …)curl$n/512
Gilles 'หยุดความชั่วร้าย'

นอกจากนี้คุณยังสามารถ httrack
วิ

6

หากคุณต้องการใช้ wget ต่อไปนี้เป็นวิธีทดสอบขนาดของไฟล์โดยไม่ต้องดาวน์โหลด:

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

แน่นอนว่า$URLเป็น URL ของไฟล์ที่คุณต้องการดาวน์โหลด

ดังนั้นคุณสามารถกำหนดเงื่อนไขสคริปต์ของคุณตามผลลัพธ์ เช่น:

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

สำหรับ จำกัด ขนาดการดาวน์โหลดที่ 20 MB

(รหัสน่าเกลียดเพื่อจุดประสงค์ในการให้ข้อมูลเท่านั้น)


1

ดูเหมือนจะไม่มีวิธีใดที่เหมาะสมในการตั้งค่าขนาดไฟล์สูงสุดด้วย wget


2
วิธี Gilles ด้วยulimit(ดูbash(1), setrlimit(2)) จะยังทำงานร่วมกับwget(1)แม้ว่ามันจะเป็นบิตหนัก
sarnold

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.