Sử dụng sftp để chuyển một thư mục?


50

Khi tôi cố gắng sử dụng sftp để chuyển thư mục chứa tệp, tôi nhận được thông báo lỗi:

skipping non-regular file directory_name

Thư mục chứa một vài tệp và hai thư mục con.

Tôi đang làm gì sai?

Câu trả lời:


49

sftp, như cpscp, 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 -rtùy chọn.

Vì vậy, thêm -rvào lệnh.


2
-r sau lệnh put? Tôi nhận được thông báo lỗi "put: Cờ không hợp lệ -r" nếu tôi làm như vậy. Thêm nó vào lệnh sftp ban đầu cũng không hoạt động.
haziz

5
Thêm -rvào sftplệnh khi bạn đang kết nối. sftp -r user@host
Kevin

1
@Kevin Tôi nhận được lỗi sau "sftp: không rõ tùy chọn --r"
Amatya

2
Lưu ý rằng có một lỗi khá lâu trong SFTP của OpenSSH: khi sao chép đệ quy một thư mục vào một máy chủ từ xa, chính thư mục đó phải tồn tại trên máy chủ đích nếu không việc chuyển sẽ thất bại với thông báo lỗi không rõ ràng : Couldn't canonicalise: No such file or directory.
WhiteWinterWolf

5
nên là một cái gì đó như:# sftp user@remote-host #> get -r remote-folder
hbinduni

21

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.

( -atùy chọn chăm sóc những thứ như đệ quy thư mục)


3
Một chút làm rõ về các tham số được đề cập: -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.
WhiteWinterWolf

@WhiteWinterWolf dường như là phiên bản phụ thuộc vào việc -lchuyể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 -ltrong -a.
Polemon

5

Bạn cũng có thể sử dụng scp. Định dạng chung là

scp -rp sourceDirName username@server:destDirName

scpcó 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 đổi

Tôi tin rằng phần còn lại của các mục là tự giải thích


và scp -rp -P <port> .... khi sử dụng cổng không chuẩn
Pancho

4

Điều này làm việc cho tôi:

1) kết nối qua sftpmáy chủ từ xa

2) thay đổi vào thư mục từ xa bạn muốn sao chép. (Ví dụ: Nhạc cd)

3) thay đổi thư mục cục bộ mà bạn muốn sao chép vào. (Ví dụ: màn hình LCD)

4) Ban hành lệnh này: get -r *


4

Nếu rsynckhô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 mirrorlệnh để tải lên đệ quy, như thế này:

mirror -R

(Lưu ý rằng đệ quy là mặc định. -Rngượ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 cdvào các thư mục bạn muốn phản chiếu. Hoạt động tuyệt vời!


2

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

0

Đó là một chút bùn nhưng điều làm việc cho tôi là:

  1. Sử dụng sshđể đăng nhập vào máy từ xa
  2. Sử dụng sftptừ máy từ xa đến máy cục bộ của bạn
  3. Sau đó sử dụng getlệnh với -rtùy chọn để di chuyển thư mục và tất cả các tệp của nó.

1
không hoạt động với -rsftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

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. sftpyê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 )

  • --delete - xóa các tệp không tồn tại trên người gửi (hệ thống)
  • -v - verbose (-vv sẽ cung cấp thông tin chi tiết hơn)
  • -e "tùy chọn ssh" - chỉ định ssh làm vỏ từ xa
  • -a - chế độ lưu trữ - nó bảo vệ các quyền (chủ sở hữu, nhóm), thời gian, liên kết tượng trưng và thiết bị
  • -r - recurse vào thư mục
  • -z - nén dữ liệu tệp trong khi chuyển
  • --exclude 'Foldername' - loại trừ thư mục tương ứng khỏi chuyển
  • -P - hiển thị tiến trình trong quá trình chuyển

Mong rằng sẽ giúp!


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.