3

すべての bash スクリプトを Ruby に移行中です。Ruby は素晴らしいと思いますが、小さな問題で立ち往生しています。このスクリプトを移動しようとしています (基本的に、x 時間より古いすべてのログを見つけて処理します)。Bashスクリプトは次のようになります

find /var/log/myservice.log.* -mmin -120  -exec cp {} /home/myhomedir/mylogs/ \;

もちろん、すべてのファイルをループして手動で適用File.mtimeし、特定することもできます。ただし、これを効率的に行うための、よりクリーンでワンライナーがあるかどうかを理解したいと思います。

4

1 に答える 1

11

一発ギャグ:

require 'fileutils'; Dir.glob("/var/log/myservice.log.*").each{|f| FileUtils.cp(f, '/home/myhomedir/mylogs/') if File.mtime(f) < (Time.now - (60*120)) }

私はそれがもう少し綴られていることを望みますが:

require 'fileutils'
Dir.glob("/var/log/myservice.log.*").
  select{|f| File.mtime(f) < (Time.now - (60*120)) }.
  each{|f| FileUtils.cp(f, '/home/myhomedir/mylogs/') }
于 2013-02-08T23:52:13.457 に答える