sftp-如何仅从目标文件夹中不存在的文件夹复制文件


19

我想知道是否可以使用进行get文件sftp下载,但是阻止它重新下载目标文件夹中已经存在的文件?

Answers:


20

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命令。


7

您可以将-a标志用于get命令:

$ sftp example.com
sftp> get -a hello.txt

您当然可以指定*下载整个目录。

但是,有一些警告。

  • 这在OS X上不起作用。在其他系统上可能不起作用。我已经在Ubuntu 15.04上对其进行了测试。
  • 该选项旨在恢复中断的下载。如果您的文件已更改,则结果将是下载损坏。

更好的选择是使用rsync

rsync example.com:hello.txt

这将始终为您提供服务器上的文件,仅在本地副本和远程副本之间的差异(如果它们不同)之间进行传输,并且该文件是通用的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.