Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญ wget: 15 ตัวอย่างการดาวน์โหลดอันทรงพลัง

เชี่ยวชาญ wget: 15 ตัวอย่างการดาวน์โหลดอันทรงพลัง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.