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

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

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

ในบทความนี้ เราจะมาทบทวนวิธีใช้ wget สำหรับสถานการณ์การดาวน์โหลดที่หลากหลายโดยใช้ตัวอย่าง wget ที่ยอดเยี่ยม 15 ตัวอย่าง

1. ดาวน์โหลดไฟล์เดี่ยวด้วย wget

ตัวอย่างต่อไปนี้ดาวน์โหลดไฟล์เดียวจากอินเทอร์เน็ตและจัดเก็บไว้ในไดเร็กทอรีปัจจุบัน

$ wget http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2

ขณะดาวน์โหลดจะแสดงแถบความคืบหน้าพร้อมข้อมูลต่อไปนี้:

  • %อายุการดาวน์โหลดเสร็จสิ้น (เช่น 31% ดังที่แสดงด้านล่าง)
  • จำนวนไบต์ที่ดาวน์โหลดทั้งหมดจนถึงตอนนี้ (เช่น 1,213,592 ไบต์ดังที่แสดงด้านล่าง)
  • ความเร็วในการดาวน์โหลดปัจจุบัน (เช่น 68.2K/s ดังที่แสดงด้านล่าง)
  • เวลาที่เหลือในการดาวน์โหลด (เช่น เวลาประมาณ 34 วินาทีดังที่แสดงด้านล่าง)

อยู่ระหว่างการดาวน์โหลด:

$ wget http://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 http://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 จะเลือกชื่อไฟล์จากคำสุดท้ายหลังเครื่องหมายทับสุดท้าย ซึ่งอาจไม่เหมาะสมเสมอไป

ผิด: ตัวอย่างต่อไปนี้จะดาวน์โหลดและจัดเก็บไฟล์ชื่อ:download_script.php?src_id=7701

$ wget http://www.vim.org/scripts/download_script.php?src_id=7701

แม้ว่าไฟล์ที่ดาวน์โหลดจะอยู่ในรูปแบบ zip แต่ไฟล์นั้นจะถูกจัดเก็บไว้ในไฟล์ดังที่แสดงด้านล่าง

$ ls
download_script.php?src_id=7701

ถูกต้อง: เพื่อแก้ไขปัญหานี้ เราสามารถระบุชื่อไฟล์เอาต์พุตได้โดยใช้ตัวเลือก -O เป็น:

$ wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701

3. ระบุความเร็วในการดาวน์โหลด / อัตราการดาวน์โหลดโดยใช้ wget –limit-rate

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

ในตัวอย่างต่อไปนี้ ความเร็วในการดาวน์โหลดถูกจำกัดไว้ที่ 200k

$ wget --limit-rate=200k http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2

4. ทำการดาวน์โหลดที่ไม่สมบูรณ์ต่อโดยใช้ wget -c

เริ่มการดาวน์โหลดใหม่ซึ่งหยุดกลางคันโดยใช้ตัวเลือก wget -c ดังที่แสดงด้านล่าง

$ wget -c http://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 http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
Continuing in background, pid 1984.
Output will be written to `wget-log'.

มันจะเริ่มต้นการดาวน์โหลดและแจ้งเชลล์ให้คุณทราบ คุณสามารถตรวจสอบสถานะการดาวน์โหลดได้ตลอดเวลาโดยใช้ 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. Mask User Agent และแสดง wget เหมือนเบราว์เซอร์ที่ใช้ wget –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

เมื่อคุณจะทำการดาวน์โหลดตามกำหนดเวลา คุณควรตรวจสอบว่าการดาวน์โหลดจะเกิดขึ้นตามปกติหรือไม่ตามเวลาที่กำหนด หากต้องการทำเช่นนั้น ให้คัดลอกบรรทัดจากกำหนดการทุกประการ จากนั้นเพิ่มตัวเลือก –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!!!

คุณสามารถใช้ตัวเลือกสไปเดอร์ในสถานการณ์ต่อไปนี้:

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

8. เพิ่มจำนวนความพยายามในการลองใหม่ทั้งหมดโดยใช้ wget –tries

หากการเชื่อมต่ออินเทอร์เน็ตมีปัญหา และหากไฟล์ดาวน์โหลดมีขนาดใหญ่ ก็มีโอกาสที่การดาวน์โหลดจะล้มเหลว ตามค่าเริ่มต้น เราจะลองอีกครั้ง 20 ครั้งเพื่อให้การดาวน์โหลดสำเร็จ

หากจำเป็น คุณสามารถเพิ่มความพยายามในการลองอีกครั้งโดยใช้ตัวเลือก –tries ดังที่แสดงด้านล่าง

$ wget --tries=75 DOWNLOAD-URL

9. ดาวน์โหลดไฟล์หลายไฟล์ / URL โดยใช้ Wget -i

ขั้นแรก เก็บไฟล์ดาวน์โหลดหรือ URL ทั้งหมดในไฟล์ข้อความเป็น:

$ cat > download-file-list.txt
URL1
URL2
URL3
URL4

จากนั้น ให้ download-file-list.txt เป็นอาร์กิวเมนต์เพื่อใช้ตัวเลือก -i ดังที่แสดงด้านล่าง

$ wget -i download-file-list.txt

10. ดาวน์โหลดเว็บไซต์แบบเต็มโดยใช้ wget –mirror

ต่อไปนี้เป็นบรรทัดคำสั่งที่คุณต้องการดำเนินการเมื่อคุณต้องการดาวน์โหลดเว็บไซต์ฉบับเต็มและทำให้พร้อมสำหรับการดูในท้องถิ่น

$ wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL
  • –mirror :เปิดตัวเลือกที่เหมาะสมสำหรับการมิเรอร์
  • -p :ดาวน์โหลดไฟล์ทั้งหมดที่จำเป็นในการแสดงหน้า HTML ที่กำหนดอย่างเหมาะสม
  • –convert-links :หลังจากดาวน์โหลด ให้แปลงลิงก์ในเอกสารเพื่อการดูในท้องถิ่น
  • -P ./LOCAL-DIR :บันทึกไฟล์และไดเร็กทอรีทั้งหมดไปยังไดเร็กทอรีที่ระบุ

11. ปฏิเสธไฟล์บางประเภทขณะดาวน์โหลดโดยใช้ wget –reject

คุณพบเว็บไซต์ที่เป็นประโยชน์ แต่ไม่ต้องการดาวน์โหลดภาพ คุณสามารถระบุสิ่งต่อไปนี้ได้

$ wget --reject=gif WEBSITE-TO-BE-DOWNLOADED

12. บันทึกข้อความลงในไฟล์บันทึกแทนการใช้ stderr โดยใช้ wget -o

เมื่อคุณต้องการให้บันทึกถูกเปลี่ยนเส้นทางไปยังไฟล์บันทึกแทนเทอร์มินัล

$ 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 http://url-to-webpage-with-pdfs/

15. ดาวน์โหลด FTP ด้วย wget

คุณสามารถใช้ wget เพื่อดาวน์โหลด FTP ดังที่แสดงด้านล่าง

ดาวน์โหลด FTP แบบไม่ระบุชื่อโดยใช้ Wget

$ wget ftp-url

ดาวน์โหลด FTP โดยใช้ wget พร้อมการตรวจสอบชื่อผู้ใช้และรหัสผ่าน

$ wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL

หากคุณชอบบทความนี้ โปรดบุ๊กมาร์กบทความด้วยคำว่า delicious หรือ Stumble