วิธีการดาวน์โหลดโฟลเดอร์ซ้ำ ๆ ผ่าน FTP บน Linux [ปิด]


325

ฉันพยายาม ftp โฟลเดอร์โดยใช้ไคลเอนต์บรรทัดคำสั่ง ftp แต่จนถึงตอนนี้ฉันสามารถใช้ 'รับ' เพื่อรับไฟล์แต่ละไฟล์ได้


5
คำตอบที่ถูกต้องคือจาก 6 เม.ย. '11 ที่ 14:13 โดย lkuty อย่าใช้mgetมันไม่เวียนเกิดเลย คำตอบจาก 22 กันยายน '08 ที่ 9:01 Thibaut Barrèreง่ายต่อการเข้าใจ แต่ต้องเพิ่มตัวเลือก-l 0ตามที่ระบุไว้ในความคิดเห็น
chriscatfr

คำตอบ:


635

คุณสามารถพึ่งพา wget ซึ่งมักจะจัดการ ftp ได้อย่างถูกต้อง (อย่างน้อยในประสบการณ์ของฉันเอง) ตัวอย่างเช่น:

wget -r ftp://user:pass@server.com/

นอกจากนี้คุณยังสามารถใช้-mซึ่งเหมาะสำหรับการมิเรอร์ -r -N -l infขณะนี้เป็นเวลาเทียบเท่ากับ

หากคุณมีอักขระพิเศษบางอย่างในรายละเอียดข้อมูลรับรองคุณสามารถระบุ--userและ--passwordอาร์กิวเมนต์เพื่อให้ทำงานได้ ตัวอย่างที่มีการเข้าสู่ระบบแบบกำหนดเองที่มีอักขระเฉพาะ:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

แก้ไข ตามที่ชี้โดย @asmaier ให้ระวังว่าแม้ว่า-rจะเป็นการเรียกซ้ำ แต่ก็มีระดับสูงสุดเริ่มต้นที่ 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

หากคุณไม่ต้องการที่จะพลาดตำบลย่อยให้ใช้ตัวเลือกการมิเรอร์ดีกว่า-m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.

121
ใช้ดีกว่าwget -m( --mirror) wget -rถูก จำกัด ที่ความลึกการเรียกซ้ำ 5 โดยค่าเริ่มต้น
asmaier

13
ฉันต้องใช้--userและ--passwordบน Red Hat ด้วย wget ของฉันคือGNU Wget 1.11.4 Red Hat modifiedฉันสงสัยว่ามันเป็นสิ่งที่รุ่นหรือสิ่ง distro แล้ว ...
Devin

61
คุณสามารถตั้งค่าระดับการเรียกซ้ำแบบไม่ จำกัด ด้วย-l 0ดังนั้นจึงไม่จำเป็นต้องใช้--mirrorซึ่งอาจมีผลข้างเคียงที่ไม่พึงประสงค์เช่นไฟล์.
list

28
wget --ask-password -rl 99 ftp://user@server.comฉันใช้ วิธีนี้จะมองไม่เห็นรหัสผ่านpsและไม่อยู่ในประวัติ แน่นอนโดยธรรมชาติของ ftp มันถูกส่งไปยังเซิร์ฟเวอร์แบบไม่เข้ารหัส
วอลเตอร์ Tross

7
คำเตือนสำหรับ bash newbs: คุณจะต้องใช้เครื่องหมายอัญประกาศเดี่ยวหากชื่อผู้ใช้หรือรหัสผ่านของคุณมีอักขระควบคุม (เช่น$) เช่น--user='user' --password='pa$$word'
tobek

164

เพียงเพื่อเติมเต็มคำตอบที่ได้รับจาก Thibaut Barrère

ฉันใช้

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

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

  • -nH หลีกเลี่ยงการสร้างไดเรกทอรีที่ตั้งชื่อตามชื่อเซิร์ฟเวอร์
  • -nc หลีกเลี่ยงการสร้างไฟล์ใหม่หากไฟล์นั้นมีอยู่ในปลายทางแล้ว (เพิ่งถูกข้ามไป)
  • --cut-dirs=5อนุญาตให้นำเนื้อหาของ / absolute / path / to / directory และนำไปไว้ในไดเรกทอรีที่คุณเรียกใช้ wget หมายเลข 5 ใช้เพื่อกรอง 5 องค์ประกอบของเส้นทาง เครื่องหมายทับสองครั้งหมายถึงส่วนประกอบเพิ่มเติม

3
สุกใส ความสามารถในการข้ามไฟล์ที่มีอยู่แล้วนั้นยอดเยี่ยมสำหรับการติดต่อกับการเพิ่มล่าสุดในการย้ายเซิร์ฟเวอร์ rsync มีประสิทธิภาพมากขึ้นและมีความยืดหยุ่นมากขึ้น แต่บางครั้งตัวเลือกนั้นไม่พร้อมใช้งานและสามารถใช้ FTP ได้เท่านั้น
Jason

พารามิเตอร์ที่ดีที่นี่โดยเฉพาะอย่างยิ่ง -nc และ - cut-dirs ขอบคุณสำหรับการแบ่งปัน!
แลนซ์คลีฟแลนด์

2
ฉันไม่ไว้วางใจเสมอ "ข้ามไฟล์ที่มีอยู่" เพราะอย่างใดอย่างหนึ่งอาจจะไม่สมบูรณ์หรือแตกต่างกันในขนาดและเนื้อหา แต่ดีเขาพูดถึงตัวเลือก
Daniel W.

แม้วันนี้ฉันยังคงใช้คำสั่ง wget นี้เมื่อไม่สามารถใช้ rsync -nc และ --cut-dirs นั้นมีประโยชน์มาก!
ครึ่งบ้าคลั่ง

4
! น่ากลัว และถ้าคุณไม่ต้องการที่จะใส่รหัสผ่านของคุณในบรรทัดคำสั่งคุณสามารถใช้และ--ftp-user=USER --ask-password
shoover

25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

ฉันไม่สามารถลงชื่อเข้าใช้ FTP เซิร์ฟเวอร์โดยใช้ params แต่ใช้โครงสร้างopen ftp://USERNAME:PASSWORD@HOSTหลังจากเริ่ม ncftp …
feeela

+1 - ฉันรู้ว่าโพสต์นี้เก่า แต่ฉันเพิ่งเจอมันและ ncftp นั้นใช้งานง่ายมาก ฉันใช้ -R เพื่อเรียกซ้ำด้วย ncftpget
Zack Macomber

เชื่อถือได้แน่นอนกว่าwgetและเร็วกว่าในโหมด TAR ขอบคุณ!
lencinhaus

3
สิ่งนี้ไม่ทำงานตามที่ระบุไว้ใน Ubuntu 14.04 ไวยากรณ์ที่ใช้งานได้สำหรับฉันคือ "get -R directory" แทนที่จะเป็น mget
อีวาน

ทำงานกับฉันใน Ubuntu 14.04 ฉันไม่จำเป็นต้อง mget มันคือทั้งหมดที่นั่น
แอชลีย์

22

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


7
btw mirror -R dirอัปโหลด / อัปเดตไดเรกทอรีแบบเรียกซ้ำ
Ciro Santilli 冠状冠状病六四事件法轮功

1
ยังสามารถใช้mirror ./สำหรับการดาวน์โหลดไฟล์และโฟลเดอร์ทั้งหมดซ้ำในเส้นทางปัจจุบัน
Nabi KAZ

นอกจากนี้คุณยังสามารถพิมพ์mirrorสำหรับไดเรกทอรีปัจจุบันและมันเป็นโฟลเดอร์ย่อย
Michael

17

หากคุณสามารถใช้scpแทนการftpที่-rตัวเลือกที่จะทำเพื่อคุณ ฉันจะตรวจสอบเพื่อดูว่าคุณสามารถใช้กลไกการถ่ายโอนไฟล์ที่ทันสมัยกว่า FTP ได้หรือไม่


2
ฉันโหวตสิ่งนี้เพราะมันเป็นความคิดแรกของฉันแม้ว่ามันจะไม่ได้ตอบคำถามอย่างที่เป็น
metao

ท่านใดที่เสนอ @ greg-hewgill? ฉันมีปัญหาที่คล้ายกัน
Michal Gonda

1
scpจะยังคงพยายามใช้ ssh ซึ่งจะไม่ทำงานหากคุณมีข้อมูลรับรอง FTP เท่านั้น รู้สึกแปลก ๆ ที่ตอบสนองต่อความคิดเห็นจากปี 2008 โดยบอกว่าเทคโนโลยีที่ฉันติดอยู่นั้นไม่ทันสมัย ​​:( เก่ามากปี 2008 ฉันอายุครบ 18 ปีในวันที่คุณโพสต์ความคิดเห็นของคุณ
aexl


7

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

ตรวจสอบลิงค์นี้ ... http://www.ncftp.com/


2
ทำงาน ncftp บน windows ได้เป็นอย่างดี
Ilya

ฉันรัก ncftp! ขอบคุณ.
jocull

3

หากคุณสามารถทำได้ฉันขอแนะนำให้คุณtarและbzip(หรือgzipอะไรก็ตามที่ลอยอยู่ในเรือของคุณ) ไดเรกทอรีบนเครื่องระยะไกล - สำหรับไดเรกทอรีที่มีขนาดใหญ่ ๆ การประหยัดแบนด์วิดท์อาจคุ้มค่ากับเวลาที่จะซิป / เปิดเครื่องรูด


บางทีในปี 2008 แต่ในปี 2013 แบนด์วิดธ์ไม่สำคัญอีกต่อไปและคุณอาจมี FTP แต่ไม่ปลอบใจเข้าถึง :-)
แดเนียลดับบลิว

3

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



1

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

หากต้องการคัดลอกไดเรกทอรีระยะไกลจากระยะไกลตัวเลือกเหล่านี้จะดีกว่า:

  • rsyncเป็นเครื่องมือที่เหมาะสมที่สุดหากคุณสามารถเข้าสู่ระบบผ่านsshเพราะมันคัดลอกเฉพาะความแตกต่างและสามารถรีสตาร์ทได้อย่างง่ายดายในช่วงกลางในกรณีที่การเชื่อมต่อหยุด

  • ssh -r เป็นตัวเลือกที่ดีที่สุดอันดับสองในการคัดลอกโครงสร้างไดเรกทอรีซ้ำ

ดู:


ไม่ปลอดภัยเพียง ftp
JosFabre

เป็นปี 2558 ไม่ควรใช้ FTP
Tilo

1
ฉันเห็นด้วย. และควรให้คำแนะนำเพื่อความปลอดภัยที่ดีขึ้น แต่คำถามที่เกี่ยวกับ FTP จึงบอกว่าไม่ควรใช้มันไม่ได้ช่วยให้
JosFabre

ฉันไม่เห็นด้วยอย่างเคารพ พวกเขากำลังใช้เครื่องมือที่ผิดสำหรับงาน พวกเขาควรเรียนรู้การใช้เครื่องมือที่ปลอดภัยและเป็นปัจจุบันมากกว่า ftp ของปี 1980 โดยเฉพาะอย่างยิ่งไม่มีใครควรใช้เซิร์ฟเวอร์ ftp อีกต่อไป: P
Tilo

4
ขออภัยเมื่อสัปดาห์ที่แล้วฉันกำลังเข้าถึงเซิร์ฟเวอร์ที่มีการเชื่อมต่อ FTP เท่านั้น งานของฉันคือการย้ายออกไปจากมัน
Antti Haapala

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