Câu trả lời:
sftp
có khả năng hạn chế. Tuy nhiên, get
lệnh có một tùy chọn có thể thực hiện thủ thuật: get -a
hoàn thành tải xuống một phần, do đó, nếu một tệp đã có trên máy khách và ít nhất là lớn như tệp trên máy chủ, nó sẽ không được tải xuống. Nếu tệp có mặt nhưng ngắn hơn, phần cuối của tệp sẽ được chuyển, điều này có ý nghĩa nếu tệp cục bộ là sản phẩm của quá trình tải xuống bị gián đoạn.
Cách dễ nhất để thực hiện những điều phức tạp trên SFTP là sử dụng SSHFS . SSHFS là một hệ thống tệp sử dụng SFTP để làm cho một hệ thống tệp từ xa xuất hiện dưới dạng một filessytem cục bộ. Trên máy khách, SSHFS yêu cầu FUSE , có sẵn trên hầu hết các thông báo hiện đại. Trên máy chủ, SSHFS yêu cầu SFTP; nếu máy chủ cho phép SFTP thì bạn có thể sử dụng SSHFS với nó.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Lưu ý rằng rsync trên SSHFS không thể tận dụng thuật toán chuyển delta, vì nó không thể tính toán tổng kiểm tra một phần ở phía xa. Điều đó không liên quan để tải xuống một lần nhưng lãng phí nếu bạn đang đồng bộ hóa các tệp đã được sửa đổi. Để đồng bộ hóa hiệu quả các tệp đã sửa đổi, hãy sử dụng rsync -a server:/remote/path /local/path/
, nhưng điều này yêu cầu quyền truy cập vỏ SSH, không chỉ truy cập SFTP. Quyền truy cập shell có thể được giới hạn trong lệnh rsync.
Bạn có thể sử dụng -a
cờ cho get
lệnh:
$ sftp example.com
sftp> get -a hello.txt
Bạn có thể chỉ định *
để tải về toàn bộ thư mục của khóa học.
Tuy nhiên, có một vài cảnh báo.
Một lựa chọn tốt hơn sẽ được sử dụng rsync
:
rsync example.com:hello.txt
Điều này sẽ luôn cung cấp cho bạn tệp như trên máy chủ, chỉ chuyển các khác biệt giữa bản sao cục bộ và bản sao từ xa nếu chúng khác nhau và nó có sẵn trên toàn cầu.