Gil*_*il' 22
sftp
能力有限。尽管如此,该get
命令有一个选项可以解决问题:get -a
完成部分下载,因此如果文件已经存在于客户端并且至少与服务器上的文件一样大,则不会下载该文件。如果文件存在但较短,则将传输文件的末尾,如果本地文件是下载中断的产物,则这是有意义的。
通过 SFTP 执行复杂操作的最简单方法是使用SSHFS。SSHFS 是一个文件系统,它使用 SFTP 使远程文件系统显示为本地文件系统。在客户端,SSHFS 需要FUSE,它在大多数现代 unice 上可用。在服务器端,SSHFS 需要 SFTP;如果服务器允许 SFTP,那么您可以使用 SSHFS。
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Run Code Online (Sandbox Code Playgroud)
请注意,SSHFS 上的 rsync 无法利用增量传输算法,因为它无法计算远程端的部分校验和。这对于一次性下载无关紧要,但如果您要同步已修改的文件,则很浪费。为了有效同步修改后的文件,请使用rsync -a server:/remote/path /local/path/
,但这需要 SSH shell 访问,而不仅仅是 SFTP 访问。不过,shell 访问可以限制为 rsync 命令。
您可以将-a
标志用于get
命令:
$ sftp example.com
sftp> get -a hello.txt
Run Code Online (Sandbox Code Playgroud)
你当然可以指定*
下载整个目录。
但是,有一些注意事项。
更好的选择是使用rsync
:
rsync example.com:hello.txt
Run Code Online (Sandbox Code Playgroud)
这将始终为您提供服务器上的文件,仅在本地副本和远程副本之间存在差异时传输它们,并且它是普遍可用的。