2

我正在使用 SCP 将文件上传到远程服务器,但是在这样做之前查看该文件是否存在的正确方法是什么?

4

3 回答 3

11

你不能用 scp 做到这一点。但是你可以用sftp 来做。 它看起来像这样:

require 'net/sftp'

remote_path = "/path/to/remote/file"
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
  sftp.stat!(remote_path) do |response|
    unless response.ok?
    sftp.upload!("/path/to/local/file", remote_path)
  end
end
于 2009-10-26T19:14:22.080 回答
2

当心检查然后上传:这不是原子的,可能会导致竞争条件(或 TOCTOU 漏洞)。

更好的方法可能是设置上传文件的文件权限,使其不可写(在类 UNIX 系统上为 400 或 444 或类似),然后任何后续上传到相同文件名的操作都将失败。(您将得到“权限被拒绝”,这可能会受到一些解释(例如上传目录权限是否更改?)。这是此方法的一个缺点)。

你如何设置远程文件的权限?最简单的方法是将它们设置在本地文件上,然后在上传时保留它们。Ruby 的 Net::SCP README说它确实可以“跨传输保留文件属性”。

于 2009-10-26T22:19:47.680 回答
-2

这绝对可以解决您的问题,并且还会提供额外的信息。http://ruby.about.com/od/ssh/ss/netscp.htm

于 2012-05-30T10:41:46.327 回答