我需要每晚通过sftp下载新文件。目前这个目录中有成千上万的文件(我无法控制),并且希望能够将我必须抓取的文件限制为比上次运行此过程时更新的文件。
我知道我可以很容易地通过ssh执行此操作,但是我还没有看到使用sftp执行此操作的方法。除了迭代每个文件并检查attributes.mtime之外,我还有其他选择吗?
示例:
Net::SFTP.start('sftp.host.com', 'username', :password => 'password') do |sftp|
sftp.dir.glob('prefix.', '*').each do |file|
if Time.at(file.attributes.mtime) > last_process_time
sftp.download!(file, "some/local/path/")
end
end
end
答案 0 :(得分:0)
与rsync的比较(明显)(通过ssh,但是...... duh):
您的代码仅比较时间戳,rsync还检查文件大小和可选的校验和。它还会在两侧创建文件列表并进行比较。然后它开始传输不同步的文件。不确定rsync是否同时使用多个文件。 rsync可能会做更多聪明的事情。 (source)
也许其中一些rsync特性可用于仅使用sftp构建更快的同步系统。多个同时下载对我来说就像是一场即赢。
您可以将同步时间结果与rsync时间进行比较(如果需要,可以创建开发设置)吗?因为我认为一旦你掌握了上述一些东西,剩下的就是sftp协议的一些开销。