ฉันจะรับไดเรกทอรีทั้งหมดใน sftp ได้อย่างไร


189

ฉันเพิ่งเรียนรู้ที่จะใช้ sftp และฉันต้องการคัดลอกไดเรกทอรีจากคอมพิวเตอร์ระยะไกลไปยังเครื่องคอมพิวเตอร์ของฉัน ถ้าฉันลอง

get [directory]

มันทำให้ฉันมีข้อผิดพลาดนี้:

Cannot download non-regular file: /home/mpirocch/Documents

get -R ไม่ทำงานเช่นกัน


2
recursive put / get ถูกเพิ่มเข้าไปใน OpenSSH ใน 5.4 ซึ่งเปิดตัวในปี 2010 คุณอาจพิจารณาอัปเกรดเซิร์ฟเวอร์ของคุณเนื่องจากเพิ่มการแก้ไขข้อบกพร่องจำนวนมากและคุณลักษณะด้านความปลอดภัยที่ดีขึ้น
Lèsemajesté

คำตอบ:


266

ใช้การ-rตั้งค่าสถานะ (ซ้ำ):

get -r *

16
ขอบคุณสำหรับการตอบคำถามที่ตอบคำถามจริง
jonnyflash

30
ให้ฉัน:get: Invalid flag -r
ghbarratt

2
สิ่งนี้ยังทำให้ฉันมีค่าสถานะไม่ถูกต้อง ฉันไม่แน่ใจว่าระบบนี้รองรับทุกระบบหรือไม่
Ben

@Ben: เมื่อฉันถามคำถามนี้ในปี 2009 -rธงไม่ได้มีอยู่ ระบบของคุณทันสมัยหรือไม่?
แมทธิว

15
@silvinci ไม่ใช่ทุกระบบในปัจจุบัน ตัวเลือกที่ผิดกฎหมายกับ CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

ใช้:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
ใช้งานได้ แต่มันจะดีที่ได้ทำจาก SFTP (ดังนั้นฉันจะเห็นสิ่งที่ฉันคัดลอกก่อนที่ฉันจะคัดลอก) เป็นไปได้ไหม
แมทธิว

@ Matthew: ฉันไม่คิดอย่างนั้น scp -rฉันได้รับการถามตัวเองคำถามเดียวกันบางครั้งและคำตอบที่ดีที่สุดที่ฉันมีให้ขณะนี้คือ หรือคุณสามารถใช้ไคลเอนต์ SFTP ขั้นสูงเช่น Filezilla
Cristian Ciupitu

1
scp -r จะติดตาม symlinks ...
jsleuth

5
บางระบบอาจอนุญาตsftpแต่ไม่scpสามารถเข้าถึงได้
Turion

40

การใช้lftp:

lftp sftp://user@host

จากนั้นภายใน lftp cdลงในไดเรกทอรีที่คุณต้องการคัดลอกและใช้mirrorคำสั่งเพื่อดาวน์โหลดไดเรกทอรีที่เลือกซ้ำเช่นนี้:

mirror

คำสั่งนี้ยอมรับตัวเลือกและข้อโต้แย้ง:

มิเรอร์ [ตัวเลือก ] [ แหล่งที่มา [ เป้าหมาย ]]

ตัวอย่างเช่นตัวเลือก-R(หรือ--reverse) จะทำให้การอัปโหลดแผนผังไดเรกทอรีภายในไปยังไดเรกทอรีระยะไกล:

mirror -R

ดูlftp(1)man page ได้ที่เว็บไซต์ของโครงการ หรือที่ Debian.orgสำหรับคำสั่งและตัวเลือกอื่น ๆ


4
+1 lftp เป็นเหมือนชุดเวทมนตร์และความสุขเล็กน้อย!
WCWedin

16

คำแนะนำเล็ก ๆ น้อย ๆ นี้ควรช่วยสะท้อนเซิร์ฟเวอร์ระยะไกลไปยังโฟลเดอร์ภายในด้วย lftp

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = ใช้โปรโตคอล SFTP
  • mirror = โหมดมิรเรอร์
  • verbose = แสดงไฟล์ที่กำลังดาวน์โหลด
  • use-pget-n = จำนวนของเซ็กเมนต์มีประโยชน์ในการเร่งไฟล์ขนาดใหญ่
  • parallel = ดาวน์โหลดไฟล์ตัวคูณในเวลาเดียวกัน

หากคุณต้องการดาวน์โหลดไฟล์ในแบบคู่ขนานสลับuse-pget-n=8กับ--parallel=8

หวังว่าสิ่งนี้จะช่วยให้ทุกคนที่ต้องการทำมิเรอร์โฟลเดอร์ระยะไกลไปยังโฟลเดอร์ท้องถิ่น


ขอบคุณสิ่งนี้ใช้ได้กับฉันหลังจากวิธีอื่น ๆ ล้มเหลว (โดยเฉพาะอย่างยิ่งไม่มีตัวเลือก "-r" ใน sftp) ส่วนแรกของคำสั่งในกรณีของฉันต้องการที่จะยกมาเนื่องจากตัวละครดอลลาร์ในรหัสผ่านlftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
เจสัน

15

อย่าใช้โปรแกรม sftp โดยตรงหากคุณสามารถหาสิ่งที่ดีกว่า สำหรับ Linux ตัวจัดการไฟล์จำนวนมาก (อย่างน้อย Nautilus และ Dolphin, GNOME และ KDE) สนับสนุน sftp โดยกำเนิดและมี sshfs เสมอ สำหรับ Windows, มี WinSCP และอาจจะคนอื่น ๆ จุดประสงค์ทั้งหมดนี้คือเพื่อให้คุณสามารถเข้าถึงไฟล์ผ่าน sftp ราวกับว่าพวกเขาอยู่ใน filesytem ปกติดังนั้นคุณไม่ต้องกังวลว่าคุณจะเข้าถึงไฟล์เหล่านี้ผ่าน sftp


ว้าว nautilus ทำงานได้ดีมากกับ SFTP ฉันเพิ่มบุ๊กมาร์กใน Nautilus และตอนนี้มันเป็นเรื่องง่ายอย่างน่าขัน ขอบคุณ!
Matthew

ฉันมีปัญหาเรื่องประสิทธิภาพกับ Nautilus SFTP ใช่มันสะดวกมาก แต่ฉันไม่สามารถทำให้เครือข่าย 1 Gbit / s อิ่มตัวผ่าน Nautilus ได้ในขณะที่มีsftp/sshอินเตอร์เฟสบรรทัดคำสั่งธรรมดาที่ฉันใช้ (การถ่ายโอนไฟล์ cca 100 MB / s) ดังนั้นปัญหาคือ Nautilus บน GNU / Linux Mint
เริ่ม

13

ลองแทนmgetget

การชี้แจง: mget จะทำงานหากคุณอยู่ในไดเรกทอรีที่คุณต้องการคัดลอก; ถ้าคุณทำสิ่งนี้:

sftp> cd dir_to_get
sftp> mget *

มันจะได้รับไฟล์ทั้งหมดในไดเรกทอรีนั้น อย่างไรก็ตามจะไม่ได้รับเนื้อหาของไดเรกทอรีย่อยซ้ำ ๆ


1
mget ไม่ได้ผลดีไปกว่าเอามาให้ฉัน
แมทธิว

1
การรับไม่สามารถดาวน์โหลดไฟล์ที่ไม่ปกติได้ด้วยสิ่งนี้
Dchris

1
สิ่งนี้ใช้ได้กับฉันในระบบที่ 'get -r' ไม่ทำงาน
Tchotchke

10
get -r [directory]

ได้รับ[directory]และทุกอย่างภายใต้มันซึ่งrหมายถึงการเรียกซ้ำ ฉันพบนี้เพียงแค่พิมพ์จากhelpsftp


1
IMO นี่เป็นคำตอบที่ดีที่สุดสำหรับคำถามนี้ :)
ramrunner

3
นี่เป็นคำตอบที่ซ้ำกันจาก29 พ.ย. 53 (เกือบหนึ่งปีครึ่งที่แล้ว)
Cristian Ciupitu

5

เช่นเดียวกับcp:

scp -rp user@host:/path/to/dir dir

ข้างต้นจะรักษาเวลาและโหมดของไฟล์ต้นฉบับและไดเรกทอรีย่อย สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการดึงข้อมูลสำรอง


นี่เป็นคำตอบที่ซ้ำกันตั้งแต่29 พ.ย. 53 (เกือบสองปีที่แล้ว)
Cristian Ciupitu

0

ฉันมีโฟลเดอร์ Java dist ในเซิร์ฟเวอร์ระยะไกลที่ฉันมีต้นไม้ต่อไปนี้:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

เป้าหมายคือ: ฉันต้องการใช้ SFTP หรือไม่ และวางไว้ใน / tmp / <>

ขั้นตอนที่ 1 sftp remoteuser @ ip

ขั้นตอนที่ 2 cd / var / tmp

ขั้นตอนที่ 2 lmkdir / tmp / dist; lmkdir / tmp / dist / lib

ขั้นตอนที่ 3 lcd / tmp / dist

ขั้นตอนที่ 4 mget *

ขั้นตอนที่ 5 lcd / tmp / dist / lib

ขั้นตอนที่ 6 mget *

ขั้นตอนที่ 7 ในที่สุดฉันก็มีเป้าหมาย

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