ใช้ wget เพื่อดาวน์โหลดไดเรกทอรี FTP ทั้งหมดแบบวนซ้ำ


93

ฉันต้องการคัดลอกไฟล์และโฟลเดอร์ทั้งหมดจากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่ง ไฟล์บนโฮสต์เก่านั่งที่ / var / www / html และฉันมีสิทธิ์เข้าถึง FTP ไปยังเซิร์ฟเวอร์นั้นเท่านั้นและฉันไม่สามารถ TAR ไฟล์ทั้งหมดได้ การเชื่อมต่อปกติไปยังโฮสต์เก่าผ่าน FTP นำฉันไปที่โฟลเดอร์ / home / admin

ฉันพยายามเรียกใช้คำสั่งต่อไปนี้จากเซิร์ฟเวอร์ใหม่ของฉัน:

wget -r ftp://username:password@ip.of.old.host

แต่สิ่งที่ฉันได้รับคือไฟล์ index.html ที่สร้างขึ้น

ไวยากรณ์ที่ถูกต้องสำหรับการใช้ wget แบบซ้ำ ๆ บน FTP คืออะไร


2
โปรดทราบว่าโดยค่าเริ่มต้น wget -r มีความลึกเรียกซ้ำสูงสุด 5; หากคุณมีไดเรกทอรีย่อยที่ลึกกว่าพวกเขาจะถูกละเว้นเว้นแต่คุณจะเปลี่ยนแปลงสิ่งนี้ (ดู -l ในหน้า man)
mikewaters

คำตอบ:


125

ลอง-mสำหรับ--mirror

wget -m ftp://username:password@ip.of.old.host

15
ด้วยเหตุผลด้านความปลอดภัยก็จะดีที่จะใช้เพื่อหลีกเลี่ยงการใช้รหัสผ่านที่ถูกเก็บไว้ใน--ask-password history
เช็ค

มันเจ๋งมาก ทำงานเหมือนมีเสน่ห์ ..
Sambhav Sharma

นี่ควรเป็นคำตอบที่ยอมรับได้ (เพื่อการมองเห็นที่ดีขึ้น)
bgondy

จะไม่รวมถึงเส้นทางของไดเรกทอรีดาวน์โหลดฉันเดาคำตอบ @Formoda จะดีกว่า
Wasim A.

@WasimA. คุณสามารถเพิ่มเส้นทางไดเรกทอรีได้ที่นี่เช่นกัน:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

คุณทำได้ถูกต้องคุณต้องตามท้าย * ในตอนท้าย:

wget -r ftp://username:password@1.2.3.4/dir/*

สำหรับเซิร์ฟเวอร์ที่ใช้ร่วมกันคุณสามารถใช้สิ่งนี้:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

เนื่องจากเซิร์ฟเวอร์ที่ใช้ร่วมกันส่วนใหญ่มีชื่อผู้ใช้ ftp-username เช่นชื่อผู้ใช้ @ hostname ดังนั้นคำสั่ง wget แรกไม่ทำงานและคำสั่งที่สองทำงานได้ดี


1
สิ่งนี้จะไปเพียงหนึ่งไดเรกทอรีที่ลึกกว่าดีกว่าเพื่อใช้แฟ
ล็ก

ในบางกรณีคำสั่งที่สองไม่ทำงานเนื่องจากพื้นที่คุณสามารถใช้คำสั่งแรกเพื่อแชร์โฮสติ้งเช่นนี้ ** wget -r ftp: / / ชื่อผู้ใช้% 40 โฮสต์: รหัสผ่าน @ host / dir / **
Wasim A.

หมายเหตุ: คุณควรใช้อย่างใดอย่างหนึ่ง-mหรือ -r -l infเพราะ -r มีค่าความลึกเรียกซ้ำเริ่มต้นที่ 5 ดูgnu.org/software/wget/manual/…
ndemou

7

นอกจากนี้คุณยังสามารถใช้lftpในโหมดสคริปต์ได้ คำสั่งต่อไปนี้จะสะท้อนเนื้อหาของไดเรกทอรี FTP ระยะไกลที่กำหนดลงในไดเรกทอรีท้องถิ่นที่กำหนดและสามารถใส่ลงในงาน cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

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


5

คุณสามารถใช้ 'curlftpfs - ติดตั้งโฮสต์ ftp เป็นไดเรกทอรีท้องถิ่น' และเมื่อติดตั้งแล้วคุณสามารถใช้เครื่องมือไฟล์ปกติเช่น 'cp -r'


curlftpfsมีปัญหาด้านประสิทธิภาพที่สำคัญในขณะนี้เว้นแต่คุณจะลดระดับlibcurl3-gnutls
Hengjie

5

ตรวจสอบคำสั่ง wget ด้านล่างเพื่อดาวน์โหลดข้อมูลจาก FTP แบบเรียกซ้ำ

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: สำหรับการดาวน์โหลดซ้ำ

-np: สำหรับผู้ปกครองไม่มีน้อยไปหามาก

-nH: ใช้สำหรับปิดการสร้างไดเรกทอรีที่มีชื่อเหมือนกับ URL เช่น abc.xyz.com

--cut-dirs: ใช้สำหรับละเว้นจำนวนไดเรกทอรีหลัก ค่าของตัวเลือกนี้จะแตกต่างกันสำหรับคำสั่งของคุณ

คุณสามารถตรวจสอบโดยดำเนินการคำสั่งดังกล่าว




2

ใช้:

wget -m ftp://192.168.0.1

และมันจะสะท้อนไฟล์และโฟลเดอร์ทั้งหมด


อย่างที่ฉันบอกว่าการเข้าสู่ระบบผ่าน FTP จะพาฉันไปที่โฟลเดอร์ / home / admin และไฟล์ที่ฉันต้องการอยู่ใน / var / www / html ดังนั้นเมื่อฉันเรียกใช้คำสั่งที่คุณแนะนำฉันจะได้รับเนื้อหาของ / home / admin ฉันลองใช้งานด้วย192.168.0.1/var/www/htmlแต่แล้วก็ลองใช้ CWD / home / admin / var / www / html ฉันจะทำให้มันไปยังโฟลเดอร์นี้จากรูทได้อย่างไร

ฉันไม่มีประสบการณ์เกี่ยวกับปัญหานี้โดยเฉพาะ แต่คุณสามารถลองเชื่อมโยงไปยัง / var / www / html ใต้บ้านของคุณ จากนั้นคุณสามารถใช้ที่อยู่เช่น192.168.0.1/html
prestomation

ฉันพยายามสร้าง symlink แต่มันเกิดจากการสร้าง symlink ที่คล้ายกันในพื้นที่ของฉัน

1

นั่นคือไวยากรณ์ที่ถูกต้อง ไม่แน่ใจว่าทำไมคุณไม่ได้รับผลลัพธ์ที่คาดหวัง

เช่นเคยมีมากกว่าหนึ่งวิธีที่จะทำ ลอง ncftp โดยเฉพาะอย่างยิ่ง ncftpget


ฉันไม่สามารถติดตั้งซอฟต์แวร์เพิ่มเติมบนเซิร์ฟเวอร์ใหม่ของฉัน ฉันไม่ควรบอกให้ดาวน์โหลดไฟล์ทั้งหมดจาก / var / www / html หรือ ฉันลองชื่อผู้ใช้ wget -r : password@ip.of.old.host/var/www/htmlแต่ฉันพบไดเรกทอรีผิดพลาด

1

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


ฉันลอง mget * แต่มันใช้ไม่ได้กับโฟลเดอร์ย่อยบอกว่าไม่มีโฟลเดอร์ย่อยในเครื่อง มีวิธีทำให้เขาสร้างโฟลเดอร์ในเครื่องโดยอัตโนมัติหรือไม่?

ทั้งนี้ขึ้นอยู่กับลูกค้าของคุณสวิตช์ -r มักจะหลอกลวง IE: mget -r *
dr.pooter

mmm ไคลเอนต์ FTP มาตรฐาน AFAIK ใน linux ไม่ได้รับการออกแบบเพื่อดึงข้อมูลไดเรกทอรีซ้ำ ฉันหมายถึง - ไม่มีตัวเลือก -r ไคลเอนต์อื่น ๆ เช่นการสนับสนุน ncftp หรือ lftp เรียกคืนแบบเรียกซ้ำ แต่โดยปกติจะไม่สามารถใช้ได้
Stann

1

ดังที่ฉันได้กล่าวไว้ว่าการเข้าสู่ระบบผ่าน FTP จะนำฉันไปที่โฟลเดอร์ / home / admin และไฟล์ที่ฉันต้องการอยู่ใน / var / www / html

ฉันคิดว่ามันจะทำงานในกรณีของคุณ:

wget -r ftp://192.168.0.1/../../var/www/html

0

ฉันเจอ Windows hosting ด้วยชื่อผู้ใช้เป็น brinkster / ชื่อผู้ใช้ดังนั้น wget จะเกิดข้อผิดพลาดหากคุณใช้ไวยากรณ์:

wget -m ftp://brinkster/username:password@ip.of.the.host

หากต้องการผ่านสิ่งนี้ให้ใช้

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

ฉันต้องเผชิญกับสิ่งนี้ด้วย Windows hosting @ brinkster


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename จะทำงานหรือคุณสามารถเพิ่ม * แทนการป้อนชื่อไฟล์: ทำให้ลองนึกถึงพอร์ตที่ไม่ถูกต้องในกรณีของคุณ


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