Ruby で リモートのファイル操作


Ruby でサーバを管理するスクリプトを書いています。
ssh で接続できるリモートサーバのファイルを簡単に
扱える方法はないでしょうか? 例えば FileText.exist?
を ssh 接続先の サーバのファイルに対して行ないたいです。
net::ssh や net::sftp を使えばできますか?

回答の条件
  • 1人5回まで
  • 登録:2006/09/05 08:10:58
  • 終了:2006/09/12 08:15:03

回答(2件)

id:iwadon No.1

いわどん回答回数60ベストアンサー獲得回数132006/09/05 15:17:48

ポイント35pt

http://net-ssh.rubyforge.org/sftp/api/

net/sftpにopen-uriを応用した仕組みが用意されています。

example.comというホストの/foo/bar/baz.txtというファイルの存在を確認するには、例えば次のようにします。

require 'rubygems'      # 不要であればこの行を外してください。
require 'uri/open-sftp'
open('sftp://example.com/foo/bar/baz.txt') do |f|
  # ...
end

ファイルが存在すれば f を経由してファイルにアクセスできます。ファイルが存在しなければ例外が発生します。詳しくはをご覧ください。

id:naoya-i

なるほど。ありがとうございます。

2006/09/05 15:22:29
id:iwadon No.2

いわどん回答回数60ベストアンサー獲得回数132006/09/05 15:28:44

ポイント35pt

すみません、書き忘れてたことがありました。この回答に対するポイントはいりません。

先に示したスクリプト実行時に以下のような例外が発生することがあります。

C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:167:in `open_loop': undefined
 method `buffer_open' for #<URI::SFTP:0x14bbffc URL:sftp://example.com/foo/bar/baz.txt> (NoMethodError)
        from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:165:in `open_loop'
        from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:135:in `open_uri'
        from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:531:in `open'
        from b.rb:7

その場合はuri/open-sftp.rbの末尾の方に以下のように書き加えてください。

    # この下の行から
    def buffer_open(buf, proxy, options)
      direct_open(buf, options)
    end
    # この上の行まで

    include OpenURI::OpenRead
  end

end

実は先に示したスクリプトもこの対策を行った後で試したものでした。失礼しました。

id:naoya-i

補足ありがとうございます。

2006/09/05 15:32:24

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません