Answers:
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
请注意,基于SSHFS的rsync无法利用增量传输算法,因为它无法在远程端计算部分校验和。一次性下载无关紧要,但是如果要同步已修改的文件,那将很浪费。为了使修改后的文件高效同步,请使用rsync -a server:/remote/path /local/path/
,但这需要SSH Shell访问,而不仅仅是SFTP访问。但是,可以将外壳程序访问限制为rsync命令。
您可以将-a
标志用于get
命令:
$ sftp example.com
sftp> get -a hello.txt
您当然可以指定*
下载整个目录。
但是,有一些警告。
更好的选择是使用rsync
:
rsync example.com:hello.txt
这将始终为您提供服务器上的文件,仅在本地副本和远程副本之间的差异(如果它们不同)之间进行传输,并且该文件是通用的。