วิธีดาวน์โหลดไดเร็กทอรี HTTP พร้อมไฟล์และไดเรกทอรีย่อยทั้งหมดตามที่ปรากฏในรายการไฟล์ / โฟลเดอร์ออนไลน์


189

มีไดเรกทอรี HTTP ออนไลน์ที่ฉันสามารถเข้าถึงได้ wgetผมได้พยายามที่จะดาวน์โหลดทั้งหมดไดเรกทอรีย่อยและไฟล์ผ่านทาง แต่ปัญหาคือเมื่อwgetดาวน์โหลดไดเรกทอรีย่อยมันจะดาวน์โหลดindex.htmlไฟล์ที่มีรายการไฟล์ในไดเรกทอรีนั้นโดยไม่ต้องดาวน์โหลดไฟล์เอง

มีวิธีดาวน์โหลดไดเรคทอรีย่อยและไฟล์โดยไม่ จำกัด ระดับความลึกหรือไม่ (ถ้าไดเรกทอรีที่ฉันต้องการดาวน์โหลดเป็นเพียงโฟลเดอร์ที่ฉันต้องการคัดลอกไปยังคอมพิวเตอร์)

ไดเรกทอรี HTTP ออนไลน์

คำตอบ:


357

สารละลาย:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

คำอธิบาย:

  • มันจะดาวน์โหลดไฟล์และโฟลเดอร์ย่อยทั้งหมดในไดเรกทอรีddd
  • -r : ซ้ำ
  • -np: ไม่ไปที่ไดเรกทอรีด้านบนเช่นccc / ...
  • -nH : ไม่บันทึกไฟล์ไปยังโฟลเดอร์ชื่อโฮสต์
  • --cut-dirs=3: แต่บันทึกเป็นdddโดยเว้น 3 โฟลเดอร์แรกaaa , bbb , ccc
  • -R index.html: ไม่รวม ไฟล์index.html

การอ้างอิง: http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/


17
ขอบคุณ! นอกจากนี้ FYI ตามนี้คุณสามารถใช้-Rเช่น-R cssการยกเว้นไฟล์ CSS ทั้งหมดหรือใช้-Aเช่น-A pdfเพียงดาวน์โหลดไฟล์ PDF
จอห์น

7
ขอบคุณ! คำแนะนำเพิ่มเติมที่นำมาจากหน้าคน wget When downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness.
jgrump2012

3
ฉันได้รับข้อผิดพลาดนี้ 'wget' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ทำงานได้หรือไฟล์แบตช์
hamish

1
@ ต้องคุณอาจต้องติดตั้ง wget ก่อนหรือ wget ไม่ได้อยู่ใน $ PATH ของคุณ
Mingjiang Shi

16
คำตอบที่ดี แต่โปรดทราบว่าหากมีrobots.txtไฟล์ที่ไม่อนุญาตให้ดาวน์โหลดไฟล์ในไดเรกทอรีสิ่งนี้จะไม่ทำงาน -e robots=off ในกรณีที่คุณต้องการที่จะเพิ่ม ดูunix.stackexchange.com/a/252564/10312
Daniel Hershcovich

45

ผมสามารถที่จะรับนี้ในการขอบคุณการทำงานที่จะโพสต์นี้ใช้VisualWGet มันใช้งานได้ดีสำหรับฉัน ส่วนที่สำคัญดูเหมือนว่าจะตรวจสอบ-recursiveธง (ดูภาพ)

นอกจากนี้ยังพบว่าการ-no-parentตั้งค่าสถานะเป็นสิ่งสำคัญเช่นเดียวกันก็จะพยายามดาวน์โหลดทุกสิ่ง

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


2
เพิ่งพบสิ่งนี้ - ธ.ค. 2017 มันใช้งานได้ดี ฉันได้รับมันที่sourceforge.net/projects/visualwget
SDsolar

2
ทำงานได้ดีบนเครื่อง Windows อย่าลืมตรวจสอบตัวเลือกที่ระบุไว้ในคำตอบมิฉะนั้นมันจะไม่ทำงาน
csharpcoder

ไม่ทำงานกับ https ที่แน่นอน @DaveLucre ถ้าคุณลองด้วยวิธีการแก้ปัญหาใน wget cmd คุณจะสามารถดาวน์โหลดได้เช่นกัน แต่บาง severs ไม่อนุญาตให้ฉันเดา
Yannis Dran

สิ่งที่ตรวจสอบ --no-parentทำอะไร
T.Todua

1
ทำงานมีนาคม 2563!
นายโปรแกรมเมอร์

7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

จาก man wget

'-r' '--recursive' เปิดการเรียกซ้ำ ดูดาวน์โหลดแบบเรียกซ้ำสำหรับรายละเอียดเพิ่มเติม ความลึกสูงสุดเริ่มต้นคือ 5

'-np' '- ไม่มีพาเรนต์' อย่าขึ้นไปที่ไดเรกทอรีหลักเมื่อทำการเรียกซ้ำ นี่เป็นตัวเลือกที่มีประโยชน์เนื่องจากรับประกันว่าจะดาวน์โหลดเฉพาะไฟล์ที่อยู่ใต้ลำดับชั้นที่แน่นอน โปรดดูรายละเอียดเพิ่มเติมที่ขีด จำกัด ของ Directory-Based

'-nH' '- ไม่มีไดเรกทอรีโฮสต์' ปิดใช้งานการสร้างไดเรกทอรีโฮสต์ที่มีคำนำหน้า โดยค่าเริ่มต้นการเรียกใช้ Wget ด้วย '-r http://fly.srk.fer.hr/ ' จะสร้างโครงสร้างของไดเรกทอรีที่เริ่มต้นด้วย fly.srk.fer.hr/ ตัวเลือกนี้จะปิดใช้งานพฤติกรรมดังกล่าว

'--cut-dirs = number' ละเว้นส่วนประกอบไดเรกทอรีหมายเลข สิ่งนี้มีประโยชน์สำหรับการควบคุมอย่างละเอียดในไดเร็กทอรีที่จะเรียกค้นแบบเรียกซ้ำ

ยกตัวอย่างเช่นไดเรกทอรีที่ ' ftp://ftp.xemacs.org/pub/xemacs/ ' หากคุณดึงข้อมูลด้วย '-r' มันจะถูกบันทึกไว้ในเครื่องภายใต้ ftp.xemacs.org/pub/xemacs/ ในขณะที่ตัวเลือก '-nH' สามารถลบส่วน ftp.xemacs.org/ คุณยังคงติดอยู่กับ pub / xemacs นี่คือที่ '--cut-dirs' มีประโยชน์ มันทำให้ Wget ไม่“ เห็น” ส่วนประกอบของไดเรกทอรีระยะไกล นี่คือตัวอย่างของวิธีการทำงานของตัวเลือก '--cut-dirs'

ไม่มีตัวเลือก -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... หากคุณต้องการกำจัดโครงสร้างไดเรกทอรีตัวเลือกนี้จะคล้ายกับชุดของ '-nd' และ '-P' อย่างไรก็ตามแตกต่างจาก '-nd', '- cut-dirs' ไม่แพ้ไดเรกทอรีย่อยตัวอย่างเช่น '-nH --cut-dirs = 1' เบต้า / ไดเรกทอรีย่อยจะถูกวางไว้ที่ xemacs / beta เช่น ใครจะคาดหวัง


3
คำอธิบายบางอย่างจะดี
Benoît Latinier

สิ่งที่เกี่ยวกับการดาวน์โหลด ไฟล์บางประเภทโดยใช้VisualWget ? มันเป็นไปได้ที่จะดาวน์โหลดเฉพาะmp3ไฟล์ในไดเรกทอรีและไดเรกทอรีย่อยในVisualWget ?
เจสัน

3

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

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

"Download Master" เป็นส่วนเสริมสำหรับ Google Chrome ที่ใช้งานได้ดีสำหรับการดาวน์โหลดจากไดเรกทอรี คุณสามารถเลือกที่จะกรองประเภทไฟล์ที่จะดาวน์โหลดหรือดาวน์โหลดไดเรกทอรีทั้งหมด

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

สำหรับรายการคุณลักษณะล่าสุดและข้อมูลอื่น ๆ ให้เยี่ยมชมหน้าโครงการในบล็อกของผู้พัฒนา:

http://monadownloadmaster.blogspot.com/


3

คุณสามารถใช้ lftp, มีด swish กองทัพของการดาวน์โหลดถ้าคุณมีไฟล์ที่ใหญ่กว่าที่คุณสามารถเพิ่ม--use-pget-n=10คำสั่ง

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'

ทำงานได้อย่างสมบูรณ์และรวดเร็วจริง ๆ นี่ทำให้ฉันสามารถดาวน์โหลดไฟล์ขนาดเล็กได้หลายพันไฟล์ ดีมาก.
n13

ทำงานได้สมบูรณ์แบบ !! ตัวเลือกที่ดีที่สุด!
ambigus9


2

ไม่ต้องใช้ซอฟต์แวร์หรือปลั๊กอิน!

(ใช้งานได้เฉพาะถ้าคุณไม่ต้องการ deptch ซ้ำ)

ใช้ bookmarklet ลากลิงก์นี้ในที่คั่นหนังสือจากนั้นแก้ไขและวางรหัสนี้:

(function(){ var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++) { if(l[i].href.indexOf(ext) !== false){ l[i].setAttribute("download",l[i].text); l[i].click(); } } })();

และไปที่หน้า (จากตำแหน่งที่คุณต้องการดาวน์โหลดไฟล์) และคลิกที่ bookmarklet


-1

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

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

ทดสอบที่ Ubuntu 18.04 และ Kali Linux มันอาจทำงานที่ distros อื่นเช่นกัน

การใช้งาน:

  • แยกไฟล์ getwebfolder จากไฟล์ zip ด้านล่าง

  • chmod +x getwebfolder (เป็นครั้งแรกเท่านั้น)

  • ./getwebfolder webfolder_URL

เช่น ./getwebfolder http://example.com/example_folder/

ลิ้งค์ดาวน์โหลด

รายละเอียดบนบล็อก

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