wget utility เป็นตัวเลือกที่ดีที่สุดสำหรับดาวน์โหลดไฟล์จากอินเทอร์เน็ต wget จัดการสถานการณ์ดาวน์โหลดที่ซับซ้อนเกือบทุกอย่าง รวมถึงดาวน์โหลดไฟล์ขนาดใหญ่ ดาวน์โหลดแบบเรียกซ้ำ ดาวน์โหลดแบบไม่โต้ตอบ ดาวน์โหลดหลายไฟล์ ฯลฯ
ในบทความนี้ เราจะทบทวนวิธีใช้ wget สำหรับสถานการณ์ดาวน์โหลดต่างๆ ด้วย 15 ตัวอย่าง wget ที่เก๋า
1. ดาวน์โหลดไฟล์เดี่ยวด้วย wget
ตัวอย่างต่อไปนี้ดาวน์โหลดไฟล์เดี่ยวจากอินเทอร์เน็ตและเก็บในไดเรกทอรีปัจจุบัน
$ wget https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
ระหว่างดาวน์โหลด จะแสดงแถบความคืบหน้าพร้อมข้อมูลต่อไปนี้:
- % ความคืบหน้าของการดาวน์โหลด (เช่น 31% ตามที่แสดงด้านล่าง)
- จำนวนไบต์ที่ดาวน์โหลดไปแล้วทั้งหมด (เช่น 1,213,592 bytes ตามที่แสดงด้านล่าง)
- ความเร็วดาวน์โหลดปัจจุบัน (เช่น 68.2K/s ตามที่แสดงด้านล่าง)
- เวลาที่เหลือในการดาวน์โหลด (เช่น eta 34 seconds ตามที่แสดงด้านล่าง)
กำลังดาวน์โหลด:
$ wget https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2 Saving to: `strx25-0.9.2.1.tar.bz2.1' 31% [=================> 1,213,592 68.2K/s eta 34s
ดาวน์โหลดเสร็จสิ้น:
$ wget https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2 Saving to: `strx25-0.9.2.1.tar.bz2' 100%[======================>] 3,852,374 76.8K/s in 55s 2009-09-25 11:15:30 (68.7 KB/s) - `strx25-0.9.2.1.tar.bz2' saved [3852374/3852374]
2. ดาวน์โหลดและเก็บด้วยชื่อไฟล์ที่ต่างกัน ด้วย wget -O
โดยค่าเริ่มต้น wget จะเอาชื่อไฟล์จากคำสุดท้ายหลัง slash สุดท้าย ซึ่งอาจไม่เหมาะสมเสมอไป
ผิด: ตัวอย่างต่อไปนี้จะดาวน์โหลดและเก็บไฟล์ชื่อ: download_script.php?src_id=7701
$ wget https://www.vim.org/scripts/download_script.php?src_id=7701
แม้ไฟล์ที่ดาวน์โหลดจะเป็นรูปแบบ zip จะถูกเก็บในไฟล์ตามด้านล่าง
$ ls download_script.php?src_id=7701
ถูกต้อง: เพื่อแก้ปัญหานี้ เราสามารถระบุชื่อไฟล์เอาต์พุตโดยใช้ตัวเลือก -O ตามนี้:
$ wget -O taglist.zip https://www.vim.org/scripts/download_script.php?src_id=7701
3. ระบุความเร็วดาวน์โหลด / อัตราดาวน์โหลด ด้วย wget –limit-rate
ขณะรัน wget โดยค่าเริ่มต้นจะพยายามใช้แบนด์วิดท์สูงสุดที่เป็นไปได้ อาจไม่ยอมรับได้เมื่อดาวน์โหลดไฟล์ขนาดใหญ่บน production servers ดังนั้นเพื่อหลีกเลี่ยง เราสามารถจำกัดความเร็วดาวน์โหลดด้วย –limit-rate ตามด้านล่าง
ในตัวอย่างต่อไปนี้ ความเร็วดาวน์โหลดถูกจำกัดที่ 200k
$ wget --limit-rate=200k https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
4. ดำเนินการดาวน์โหลดที่ไม่สมบูรณ์ต่อด้วย wget -c
เริ่มดาวน์โหลดที่หยุดกลางทางใหม่ด้วยตัวเลือก wget -c ตามด้านล่าง
$ wget -c https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
นี่มีประโยชน์มากเมื่อคุณเริ่มดาวน์โหลดไฟล์ขนาดใหญ่ซึ่งหยุดกลางทาง แทนที่จะเริ่มดาวน์โหลดทั้งหมดใหม่ คุณสามารถเริ่มดาวน์โหลดจากจุดที่หยุดได้ด้วยตัวเลือก -c
หมายเหตุ: หากดาวน์โหลดหยุดกลางทาง เมื่อเริ่มดาวน์โหลดใหม่โดยไม่มีตัวเลือก -c wget จะต่อท้าย .1 เข้ากับชื่อไฟล์อัตโนมัติ เนื่องจากไฟล์ชื่อเดิมมีอยู่แล้ว หากไฟล์ .1 มีอยู่แล้ว จะดาวน์โหลดไฟล์ด้วย .2 ท้าย
5. ดาวน์โหลดในพื้นหลังด้วย wget -b
สำหรับการดาวน์โหลดขนาดใหญ่ ให้วางดาวน์โหลดในพื้นหลังด้วยตัวเลือก wget -b ตามด้านล่าง
$ wget -b https://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2 Continuing in background, pid 1984. Output will be written to `wget-log'.
จะเริ่มดาวน์โหลดและคืน shell prompt ให้คุณ คุณสามารถตรวจสอบสถานะการดาวน์โหลดได้ตลอดเวลาด้วย tail -f ตามด้านล่าง
$ tail -f wget-log Saving to: `strx25-0.9.2.1.tar.bz2.4' 0K .......... .......... .......... .......... .......... 1% 65.5K 57s 50K .......... .......... .......... .......... .......... 2% 85.9K 49s 100K .......... .......... .......... .......... .......... 3% 83.3K 47s 150K .......... .......... .......... .......... .......... 5% 86.6K 45s 200K .......... .......... .......... .......... .......... 6% 33.9K 56s 250K .......... .......... .......... .......... .......... 7% 182M 46s 300K .......... .......... .......... .......... .......... 9% 57.9K 47s
นอกจากนี้ โปรดทบทวนบทความ multitail ก่อนหน้านี้เกี่ยวกับวิธีใช้คำสั่ง tail อย่างมีประสิทธิภาพเพื่อดูหลายไฟล์
6. ปิดบัง User Agent และแสดง wget เหมือนเบราว์เซอร์ ด้วย wget –user-agent
บางเว็บไซต์อาจห้ามดาวน์โหลดหน้าโดยระบุว่า user agent ไม่ใช่เบราว์เซอร์ ดังนั้นคุณสามารถปิดบัง user agent ด้วยตัวเลือก –user-agent และแสดง wget เหมือนเบราว์เซอร์ ตามด้านล่าง
$ wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" URL-TO-DOWNLOAD
7. ทดสอบ URL ดาวน์โหลดด้วย wget –spider
เมื่อจะทำ scheduled download ควรตรวจสอบว่าดาวน์โหลดจะทำงานได้ดีหรือไม่ในเวลาที่กำหนด เพื่อทำเช่นนั้น ให้คัดลอกบรรทัดจากตารางเวลาอย่างแม่นยำ แล้วเพิ่มตัวเลือก –spider เพื่อตรวจสอบ
$ wget --spider DOWNLOAD-URL
หาก URL ที่ให้มาถูกต้อง จะบอกว่า
$ wget --spider download-url Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Remote file exists and could contain further links, but recursion is disabled -- not retrieving.
สิ่งนี้รับรองว่าการดาวน์โหลดจะสำเร็จในเวลาที่กำหนด แต่หากให้ URL ผิด จะได้ข้อผิดพลาดดังนี้
$ wget --spider download-url Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 404 Not Found Remote file does not exist -- broken link!!!
คุณสามารถใช้ตัวเลือก spider ภายใต้สถานการณ์ต่อไปนี้:
- ตรวจสอบก่อนกำหนดเวลาดาวน์โหลด
- ตรวจสอบว่าเว็บไซต์พร้อมใช้งานหรือไม่ในช่วงเวลาที่กำหนด
- ตรวจสอบรายการหน้าจากบุ๊กมาร์ค และหาว่าหน้าไหนยังมีอยู่
8. เพิ่มจำนวนครั้งลองใหม่ทั้งหมดด้วย wget –tries
หากการเชื่อมต่ออินเทอร์เน็ตมีปัญหา และไฟล์ดาวน์โหลดขนาดใหญ่ มีโอกาสล้มเหลวในการดาวน์โหลด โดยค่าเริ่มต้น wget ลองใหม่ 20 ครั้ง เพื่อให้ดาวน์โหลดสำเร็จ
หากต้องการ สามารถเพิ่มจำนวนครั้งลองใหม่ด้วยตัวเลือก –tries ตามด้านล่าง
$ wget --tries=75 DOWNLOAD-URL
9. ดาวน์โหลดหลายไฟล์ / URLs ด้วย Wget -i
ก่อนอื่น เก็บไฟล์ดาวน์โหลดหรือ URLs ทั้งหมดในไฟล์ข้อความดังนี้:
$ cat > download-file-list.txt URL1 URL2 URL3 URL4
ต่อไป ให้ download-file-list.txt เป็นอาร์กิวเมนต์ให้ wget โดยใช้ตัวเลือก -i ตามด้านล่าง
$ wget -i download-file-list.txt
10. ดาวน์โหลดเว็บไซต์ทั้งหมดด้วย wget –mirror
บรรทัดคำสั่งต่อไปนี้คือสิ่งที่คุณต้องการรันเมื่อต้องการดาวน์โหลดเว็บไซต์ทั้งหมดและทำให้พร้อมสำหรับการดูแบบออฟไลน์
$ wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL
- –mirror : เปิดตัวเลือกที่เหมาะสมสำหรับ mirroring
- -p : ดาวน์โหลดไฟล์ทั้งหมดที่จำเป็นสำหรับแสดงหน้า HTML ให้ถูกต้อง
- –convert-links : หลังดาวน์โหลด แปลงลิงก์ในเอกสารสำหรับการดูแบบออฟไลน์
- -P ./LOCAL-DIR : บันทึกไฟล์และไดเรกทอรีทั้งหมดไปที่ไดเรกทอรีที่ระบุ
11. ปฏิเสธประเภทไฟล์บางอย่างขณะดาวน์โหลด ด้วย wget –reject
คุณพบเว็บไซต์ที่มีประโยชน์ แต่ไม่อยากดาวน์โหลดรูปภาพ สามารถระบุดังนี้
$ wget --reject=gif WEBSITE-TO-BE-DOWNLOADED
12. บันทึกข้อความลงไฟล์ log แทน stderr ด้วย wget -o
เมื่อต้องการ redirect log ไปไฟล์ log แทนเทอร์มินัล
$ wget -o download.log DOWNLOAD-URL
13. หยุดดาวน์โหลดเมื่อเกินขนาดที่กำหนด ด้วย wget -Q
เมื่อต้องการหยุดดาวน์โหลดเมื่อข้าม 5 MB สามารถใช้บรรทัดคำสั่ง wget ต่อไปนี้
$ wget -Q5m -i FILE-WHICH-HAS-URLS
หมายเหตุ: โควต้านี้จะไม่มีผลเมื่อดาวน์โหลด URL เดียว นั่นคือ ไม่ว่าขนาดโควต้าจะเป็นเท่าไร ทุกอย่างจะดาวน์โหลดเมื่อระบุไฟล์เดียว โควต้านี้ใช้ได้เฉพาะกับการดาวน์โหลดแบบเรียกซ้ำ
14. ดาวน์โหลดเฉพาะประเภทไฟล์บางอย่าง ด้วย wget -r -A
คุณสามารถใช้ได้ภายใต้สถานการณ์ต่อไปนี้:
- ดาวน์โหลดรูปภาพทั้งหมดจากเว็บไซต์
- ดาวน์โหลดวิดีโอทั้งหมดจากเว็บไซต์
- ดาวน์โหลดไฟล์ PDF ทั้งหมดจากเว็บไซต์
$ wget -r -A.pdf https://url-to-webpage-with-pdfs/
15. ดาวน์โหลด FTP ด้วย wget
คุณสามารถใช้ wget ดำเนินการดาวน์โหลด FTP ตามด้านล่าง
Anonymous FTP download using Wget
$ wget ftp-url
FTP download using wget with username and password authentication.
$ wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL
หากคุณชอบบทความนี้ โปรดบุ๊กมาร์กด้วย delicious หรือ Stumble.