Câu trả lời:
sftp
, như cp
và scp
, yêu cầu rằng khi bạn sao chép một thư mục (và rõ ràng là nội dung của nó), bạn phải nói rõ ràng rằng bạn muốn chuyển thư mục theo cách đệ quy với -r
tùy chọn.
Vì vậy, thêm -r
vào lệnh.
-r
vào sftp
lệnh khi bạn đang kết nối. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Tôi chỉ có thể đề nghị, bạn sử dụng rsync
. Đó là một phần của tiêu chuẩn công nghiệp, khi di chuyển tệp qua các kết nối an toàn.
rsync -alPvz ./source_dir server.com:destination_dir
Đó là những gì tôi đã sử dụng trong nhiều năm nay.
( -a
tùy chọn chăm sóc những thứ như đệ quy thư mục)
-a
= đệ quy + giữ liên kết tượng trưng, quyền, thời gian sửa đổi, chủ sở hữu, nhóm, tệp đặc biệt và tệp thiết bị (sau này yêu cầu đặc quyền siêu người dùng); -l
= giữ các liên kết tượng trưng (đã bao gồm trong -a
); -P
= hiển thị tiến trình trong quá trình chuyển + giữ các tệp được chuyển một phần; -v
= chế độ dài dòng (tuy nhiên có vẻ bắt buộc khi sử dụng -P
để tránh lỗi lạ (lỗi?) protocol version mismatch
); -z
= cho phép nén dữ liệu được chuyển.
-l
chuyển đổi có được sử dụng hay không. Tôi nhớ các phiên bản cũ hơn không bao gồm -l
trong -a
.
Bạn cũng có thể sử dụng scp
. Định dạng chung là
scp -rp sourceDirName username@server:destDirName
scp
có nghĩa là "bản sao an toàn". Những lá cờ là
-r
recurse vào thư mục con-p
bảo toàn thời gian sửa đổiTôi tin rằng phần còn lại của các mục là tự giải thích
Nếu rsync
không phải là một lựa chọn, tôi sẽ đề nghị tiếp theo lftp
:
lftp sftp://user@host.com/path/path/
Sau đó sử dụng mirror
lệnh để tải lên đệ quy, như thế này:
mirror -R
(Lưu ý rằng đệ quy là mặc định. -R
Là ngược lại -. Để làm cho upload lệnh gương thay vì tải về Thử thêm --dry-run
để làm một thử nghiệm để đảm bảo nó làm những gì bạn mong đợi.)
Hoặc để tải lên mà không cần đệ quy:
mirror --no-recursion
Bạn phải cd
vào các thư mục bạn muốn phản chiếu. Hoạt động tuyệt vời!
Nếu bạn có thể, hãy sử dụng sshfs . Đây là một hệ thống tập tin FUSE , có sẵn trên hầu hết các thông báo hiện đại và hoạt động với bất kỳ máy chủ SFTP nào. Đây là một hệ thống tệp từ xa: nó cho phép bạn thao tác các tệp từ xa (qua giao thức SFTP) với các tiện ích thông thường.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Đó là một chút bùn nhưng điều làm việc cho tôi là:
ssh
để đăng nhập vào máy từ xasftp
từ máy từ xa đến máy cục bộ của bạnget
lệnh với -r
tùy chọn để di chuyển thư mục và tất cả các tệp của nó.sftp> get -r data /opt/bin get: Invalid flag -r
Nếu bạn hỏi thực sự là 'làm thế nào để tôi sử dụng sftp để chuyển một thư mục', thì
sftp -r user@server
Nhưng nếu bạn chuyển một thư mục, tôi có thể đề xuất hai tùy chọn tốt hơn, tùy thuộc vào nhu cầu của bạn. sftp
yêu cầu đăng nhập vào máy chủ từ xa trong dấu nhắc lệnh giống như ssh, nhưng nếu tất cả những gì bạn muốn là (các) tệp, có những cách dễ dàng và nhanh chóng hơn.
Scp
Đối với chuyển khoản một lần, để tải lên thử:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Đồng bộ hóa
Nếu bạn có kế hoạch đồng bộ hóa các thư mục một cách thường xuyên, sử dụng rsync có ý nghĩa hơn. Nó thực hiện deltas giữa hai thư mục, tiết kiệm thời gian truyền và dữ liệu qua dây.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Dưới đây là danh sách một số tùy chọn rsync phổ biến nhất: ( lấy từ đây )
Mong rằng sẽ giúp!
bạn có thể đi từ máy chủ đến đường dẫn cục bộ của mình bằng cách
scp -rp user@server:directoryname(full path) .