• ベストアンサー

rsyncをrubyのプログラムで使いたい。

rubyである条件を満たせばrsyncでバックアップするというプログラムを作っています。 if 条件  バックアップ end 上記のような簡単なプログラムな場合のとき if 条件  rsync -a -e ssh バックアップ元 バックアップ先 end というようにrsyncをシェルスクリプトのコマンドのように使うことはできないですよね? ちなみに今作っているプログラムはシェルスクリプトではつくってません。 そうなるとrsyncをするプログラムをif文に書くしかないんですかね? cygwinでrubyをインストールして使っているのですが、パッケージの中にはrsync.rbのようなものがないようなのでやっぱり使えないってことですよね? ちなみに初心者なんでrsyncをするプログラムをつくれるとは思えないです。 なんか簡単な方法はないですか?? ご教授をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ん? 昨日あたりほぼ同じ文面の質問を見た覚えがあるんだけど気のせい? それに対する回答で systemかbackticksを使えというのがついていた はずだけど、検索しても見つからない。

koujing
質問者

お礼

systemが使えるみたいですね。 勉強してみます。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

system() で外部プログラムを呼び出せます。

koujing
質問者

お礼

なるほど。 これは便利ですね。 早速使ってみます。

関連するQ&A

  • Rubyのpopen3について

    はじめまして Rubyをはじめて1か月の初心者です。 popen3を使用するにあたって大変困っております。 popen3で外部コマンドを実行して、実行結果の標準出力をファイルとして格納しようと思っています。 外部コマンドの内容は、SSH接続でサーバへログインし、そこにあるシェルスクリプトを実行させるもので、 呼び出すシェルスクリプトに対して、Rubyから標準入力を渡し、シェルスクリプトが標準入力を受け取り、 それをもとに呼び出したシェルスクリプトがさらに別のシェルスクリプトを呼び出し、実行結果を標準出力としてRubyで受け取ってファイルに格納したいと思っています。 ソースとしては、以下のようにしてますが、標準入力を引き渡す方法が分かりません。 その為、標準入力を引き渡す部分は記述していません。 Open3.popen3('ssh localhost sh test.sh ') do |stdin, stdout, stderr|   begin    loop do     IO.select([stdout,stderr]).flatten.compact.each { |io|      if stdout != "" then       stdout_lines = stdout        puts("stdout_lines = " + stdout_lines)      end      stderr_lines = stderr if stderr != ""      puts("stderr_lines = " + stderr_lines)     }     break if $stdout.classed? && $stderr.closed?   end   rescue EOFError   end end JRubyの1.6.8なので、Rubyのバージョンは1.8.7相当です。 なにぶん初心者の為、なにをどうすれば良いか分からない状態です。 まず、実現が可能かを知りたいです。 実現可能であれば、標準入力を引き渡す方法を教えていただきたく。 よろしくお願いします。

  • bashスクリプトの中の rubyプログラムでシェル変数を参照したい

    Windows XP で Cygwin, ruby を使っています。 bashスクリプトの中の ruby プログラムで シェル変数を参照したいのですが どうしたらよいでしょうか? 例: abc = "qwerty" ruby -e ' #ここでシェル変数 abc を参照したい '

  • rubyの勉強をしていてプログラムを作っているのですがうまくいきません。

    rubyのプログラムを作っています。 指定したディレクトリの中の指定したファイルを検索します。 そしてファイルの有無を条件にして処理をしていくプログラムをつくっています。 イメージでは下記のような感じ if test.txtを検索(検索先のディレクトリは/../../tmp) #ファイル存在する なにもしない else #ファイルが存在しない test.txtを作成 処理1  test.txtを削除 end 日本語ばっかりで申し訳ないのですがこんな感じです。 今はifを使ったのですがそれ以外の方法でもかまいません。 できればサンプルのプログラムを載せていただけるとありがたいです。 ご教授をよろしくお願いします。 利用環境 Windows XP Home Edition cygwinをインストールしてrubyを実行しています

  • rsyncコマンドでのバックアップについて

    Linux初心者です。よろしくお願いします! あるログの差分をとりバックアップをしたいと考えています。 rsyncを使うと簡単にできると分かりました。 しかし、rsyncはその名の通り「同期」をしているようで、例えば、下記のようなバックアップ取得ができないように思えます。 1日分しかログを残さないファイルがあるとします。(前日分のログは消されていく) rsyncを使って、この「元ファイル」の前日分も残しながら差分をバックアップする。 rsyncを使って上記のようなバックアップは可能でしょうか? また、他に上記のバックアップ方法に向いたコマンドやシェルのアイデアがありましたら、アドバイスをよろしくお願いいたします。

  • Ruby の実行について

    Ruby初心者です。 メモ帳で puts "hello world"と打ち、名前をsample.rbにし、c:\Users\rbというファイルに保存しました。次にコマンドプロンプトで c:\Users\rb>ruby sample.rb と入力したんですが、'ruby'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。といわれました。 どうすればいいのですか? 本を見てもネット上のサイトをみても >ruby ●●.rb なんです。

    • ベストアンサー
    • Ruby
  • ssh + rsync でパスワードを聞かれなくする方法

    SSH + rsync(rsync -e ssh ・・・で ssh 回線で同期)でファイルをコピーする時に、パスワードを聞かれなくする方法はないでしょうか? http://www.okweb.ne.jp/kotaeru.php3?q=323149 などを参考に、公開鍵を作りログイン先のauthorized_keysに登録しました。(公開鍵を作るときにパスフレーズを入力してません。) こうすると、たしかに"パスフレーズ"は聞かれないのですが、"ログインパスワード"は毎回聞かれます。これは仕方がないのでしょうか? ●ファイルのコピー先がファイアーウォールで ssh のポートくらいしか空いていないので、 ssh + rsync を使おうと思っています。 ●同期したいフォルダは複数あるので、スクリプトを作って rsync -avz -e ssh フォルダAを同期 ・・・ rsync -avz -e ssh フォルダBを同期 ・・・ ・・・ という感じで一気に同期できれば便利だな と思っていました。 ところが今のままでは、rsync コマンド一回ごとに ログインパスワードを入力することになってしまいます。

  • rubyがInternalServerError

    こんばんは。 自鯖にて初めてrubyを動かそうとしたところInternalServerError(500エラー)が帰ってきます。 まず、httpd.confに ---------------------- AddHandler cgi-script .cgi .rb ---------------------- と追加しました(このため.htaccessは作成しなくていいと思う)。 コマンドラインにて[which ruby][whereis ruby]を使い、[/usr/bin/ruby]にrubyがあることはわかるのですが、エラーが出てしまいます。 [test.rb] ---------------------- #!/usr/bin/ruby print "Content-type: text/html\n\n" print "test" ---------------------- 上記プログラムには755のパーミッションを与えています。 上記のフォルダにはCGI実行権が与えられています。 上記のフォルダではCGIはしっかりと動きます。 上記のプログラムはコマンドライン上[ruby test.rb]では動きます。 また、他のサイトもいろいろ調べましたが #!/usr/bin/env ruby #!ruby #!/usr/local/bin/ruby どのいパスでもエラーがでました。 解決方法を教えてください。 サーバ ---------------------- CentOS 5.4Final Apache 2.2.3 Ruby 1.8.5 ----------------------

  • rubyでコマンドプロンプトを使うとき

    rubyのスクリプトをコマンドプロンプトで実行する際に、ディレクトリ名を引数に指定したいと思っています。 その場合記述的には「ruby スクリプト名.rb ディレクトリ名」と書けばよろしいのでしょうか? 例えば「temp」というディレクトリがあり、それを指定したい場合は「ruby スクリプト名.rb temp」と書けば指定できてることになるのでしょうか。 低レベルな質問かもしれませんが、ruby超初心者なので教えて頂ければと思います。

    • ベストアンサー
    • Ruby
  • rubyを使ってhttp経由で外部プログラム起動させたい

    rubyを使ってhttp経由で外部プログラム起動させたい httpを経由して遠隔にあるPCのローカルスクリプトやC言語の実行バイナリを起動するにはどうすればよいでしょうか? スタンドアロンの場合は、 system "ruby hello.rb" system "ruby c:\\test\\hello.rb" system "sample.exe" などで外部プログラムを起動できると思いますが、これを遠隔PCに対して行いたいです。 イメージとしては、(アドレスはテスト用として) system "ruby http://localhost/hello.rb" のようなことがしたいのですが・・・ よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • Rubyスクリプトから他のプログラムを起動する方法について教えてください

    Rubyスクリプトから他のコマンド, プログラムを起動するのに、system()やexec()を使用していますが、これらの組み込み関数だと、起動したプログラムが終了するまでRubyスクリプトに戻ってきません。 外部プログラムを起動した後、すぐにRubyスクリプトに戻るようにするにはどうすればよいでしょうか? よろしくお願いします。

専門家に質問してみよう