Làm thế nào để tôi có được toàn bộ thư mục trong sftp?


189

Tôi chỉ đang học cách sử dụng sftp và tôi muốn sao chép một thư mục từ máy tính từ xa sang máy tính cục bộ của mình. Nếu tôi cố gắng

get [directory]

nó cho tôi lỗi này:

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

get -R cũng không hoạt động.


2
Đặt / nhận đệ quy đã được thêm vào OpenSSH vào năm 5.4, được phát hành vào năm 2010. Bạn có thể xem xét nâng cấp máy chủ của mình vì nó cũng bổ sung nhiều sửa lỗi và các tính năng bảo mật tốt hơn.
Lèse majesté

Câu trả lời:


266

Sử dụng -rcờ (đệ quy):

get -r *

16
Cảm ơn bạn đã đặt một câu trả lời mà thực sự trả lời câu hỏi.
jonnyflash

30
Cung cấp cho tôi:get: Invalid flag -r
ghbarratt

2
Điều này cũng cho tôi cờ không hợp lệ. Tôi không chắc điều này được hỗ trợ trên tất cả các hệ thống.
Ben

@Ben: Khi tôi hỏi câu hỏi này vào năm 2009, -rcờ không tồn tại. Hệ thống của bạn có được cập nhật không?
Matthew

15
@silvinci không phải tất cả các hệ thống hiện tại. Lựa chọn bất hợp pháp với CentOS 6.4 openssh-client-5.3p1-84.1.el6.x86_64
CrackerJack9

52

Sử dụng:

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

3
Điều này hoạt động, nhưng thật tuyệt khi có thể làm điều này từ SFTP (vì vậy tôi có thể thấy những gì tôi sao chép trước khi sao chép nó). Điều này có thể không?
Matthew

@Matthew: Tôi không nghĩ vậy. Tôi đã tự hỏi mình cùng một câu hỏi trong một thời gian và câu trả lời tốt nhất mà tôi có trong lúc này là scp -r. Hoặc bạn có thể sử dụng máy khách SFTP nâng cao như Filezilla.
Cristian Ciupitu

1
scp -r sẽ theo các liên kết tượng trưng ...
jsleuth

5
Một số hệ thống có thể cho phép sftp, nhưng không scptruy cập.
Turion

40

Sử dụng lftp:

lftp sftp://user@host

Sau đó, trong lftp, cdvào thư mục bạn muốn sao chép và sử dụng mirrorlệnh để tải xuống đệ quy thư mục đã chọn, như thế này:

mirror

Lệnh này chấp nhận các tùy chọn và đối số:

nhân bản [ TÙY CHỌN ] [ nguồn [ đích ]]

Ví dụ: tùy chọn -R(hoặc --reverse) sẽ khiến nó tải cây thư mục cục bộ lên thư mục từ xa:

mirror -R

Xem lftp(1)trang hướng dẫn tại trang của dự án hoặc tại Debian.org để biết các lệnh và tùy chọn khác.


4
+1 lftp giống như một bó ma thuật và niềm vui nhỏ bé!
WCWedin

16

cũng hướng dẫn nhỏ này sẽ giúp, phản chiếu một máy chủ từ xa vào thư mục cục bộ với lftp

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

  • sftp:// = sử dụng giao thức SFTP
  • mirror = chế độ gương
  • verbose = hiển thị các tệp đang được tải xuống
  • use-pget-n = số lượng phân đoạn, thực sự hữu ích để tăng tốc các tệp lớn
  • parallel = tải xuống các tập tin số nhân cùng một lúc

nếu bạn muốn tải xuống các tệp song song use-pget-n=8với--parallel=8

hy vọng điều này sẽ giúp bất cứ ai cần phản chiếu thư mục từ xa sang thư mục cục bộ


Cảm ơn, điều này làm việc cho tôi, sau khi các phương thức khác không thành công (đặc biệt là không có tùy chọn "-r" trên sftp). Phần đầu tiên của lệnh trong trường hợp của tôi cần được trích dẫn, do ký tự đô la trong mật khẩulftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason

15

Đừng sử dụng chương trình sftp trực tiếp nếu bạn có thể tìm thấy thứ gì đó tốt hơn. Đối với Linux, nhiều trình quản lý tệp (ít nhất là Nautilus và Cá heo, các tệp Gnome và KDE) hỗ trợ sftp tự nhiên và luôn có sshfs. Đối với các cửa sổ, có WinSCP, và có thể là những người khác . Quan điểm của tất cả những điều này là cho phép bạn truy cập các tệp qua sftp như thể chúng ở trên một tệp tin thông thường, vì vậy bạn không cần phải quan tâm rằng bạn đang truy cập chúng qua sftp.


Wow, nautilus hoạt động rất tốt với SFTP. Tôi đã thêm một dấu trang trong Nautilus và bây giờ mọi thứ thật dễ dàng. Cảm ơn!
Matthew

Tôi đã gặp vấn đề về hiệu năng với Nautilus SFTP. Vâng, nó thực sự tiện lợi nhưng tôi không thể bão hòa mạng 1 Gbit / s qua Nautilus, trong khi với sftp/sshgiao diện dòng lệnh đơn giản tôi đã chuyển (cca 100 MB / s chuyển tập tin). Vì vậy, vấn đề là Nautilus trên GNU / Linux Mint.
stamster

13

Hãy thử mgetthay vì get.

Làm rõ: mget sẽ hoạt động nếu bạn ở trong thư mục bạn muốn sao chép; nếu bạn làm một cái gì đó như thế này:

sftp> cd dir_to_get
sftp> mget *

nó sẽ nhận được tất cả các tập tin trong thư mục đó. Tuy nhiên, nó sẽ không nhận được đệ quy nội dung của bất kỳ thư mục con nào.


1
mget không làm việc tốt hơn là nhận cho tôi.
Matthew

1
không thể tải xuống tệp không thường xuyên với điều này
Dchris

1
Điều này làm việc cho tôi trên một hệ thống mà 'get -r' không hoạt động.
Tchotchke

10
get -r [directory]

được [directory]và mọi thứ theo nó, nơi rviết tắt của đệ quy. Tôi tìm thấy điều này chỉ bằng cách gõ helptừ sftp.


1
IMO đây là câu trả lời tốt nhất cho câu hỏi này. :)
ramrunner

3
Đây là bản sao của câu trả lời từ ngày 29 tháng 11 năm (gần một năm rưỡi trước).
Cristian Ciupitu

5

Như với cp:

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

Ở trên sẽ bảo toàn thời gian và chế độ của các tệp gốc và thư mục con. Điều này đặc biệt hữu ích cho việc truy xuất các bản sao lưu.


Đây về cơ bản là một bản sao của một câu trả lời từ ngày 29 tháng 11 năm (gần hai năm trước).
Cristian Ciupitu

0

Tôi có thư mục dist của Java trong máy chủ từ xa, nơi tôi có cây sau:

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

Mục tiêu là: Tôi muốn sử dụng SFTP? Và đặt chúng vào / tmp / <>

Bước 1. sftp remoteuser @ ip

Bước 2. cd / var / tmp

Bước 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Bước 3. LCD / tmp / dist

Bước 4. mget *

Bước 5. LCD / tmp / dist / lib

Bước 6. mget *

Bước 7. cuối cùng tôi cũng có mục tiêu của mình

$ ls
Audio.jar  lib  README.TXT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.