SCP を使用してファイルをリモート サーバーにアップロードしていますが、アップロードする前にそのファイルが存在するかどうかを確認する適切な方法は何ですか?
8323 次
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 など) にファイル許可を設定することです。その後、同じファイル名へのアップロードは失敗します。(「許可が拒否されました」というメッセージが返されますが、これは少し解釈が必要な場合があります (たとえば、アップロード ディレクトリの許可が変更されましたか?)。これは、この方法の欠点の 1 つです)。
リモートファイルのアクセス許可をどのように設定しますか? これを行う最も簡単な方法は、それらをローカル ファイルに設定し、アップロード時に保持することです。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 に答える