From: KIMURA Koichi Date: 2007-03-19T19:08:32+09:00 Subject: [ruby-list:43282] Re: rubyスクリプト内で、unixコマ 木村です。 既に解決したところに余計なことかもしれませんが On Mon, 19 Mar 2007 14:53:33 +0900 上間 健 wrote: > > system "cat " + path + ' | tr "\r\n" "\n" > ' + path + "2" > で問題解決できそうです。 これ、tr でなにをやろうとしているのでしょうか? tr にこのパラメータを渡した場合 \r → \n に置き換える \n → \n に置き換える(実質そのまま) となって、(LF区切りとして)改行が二重になってしまいますけど いいんですか? どうも \r\n という並びを \n にしたいのじゃないかなあという感じ を受けるのですけど、勘違いだったらごめんなさい。 もし \r を削除したいということなら tr -d '\r' でいいと思います。 で再帰的に処理する方法についてですけど、こういう方法はどうでしょう? require 'find' def do_replace(x) dir = File.dirname(x) src = File.basename(x) dest = src + '2' #system "cd #{dir} ; cat #{src} | tr -d '\\r' > #{dest}" puts "cd #{dir} ; cat #{src} | tr -d '\\r' > #{dest}" # デバッグ用 end target = ARGV.shift || '/path/to/dir/' Find.find(target) do |x| do_replace x end 上記のスクリプトでは system 経由で trを呼び出してますけど、もちろん Ruby自体にやらせてもまったく問題はないです。 スクリプトを起動するときに、処理対象のディレクトリの名前を与えれば よいです(上の例ではデフォルトのディレクトリを設定していますが)。 -- 木村浩一