2013-02-08 3 views
1

Я нахожусь в середине переноса всех моих сценариев bash на Ruby. Я нахожу Ruby, чтобы быть потрясающим, но застрял с небольшой проблемой. Я пытаюсь переместить этот скрипт (в основном найти все журналы старше х часов и обработать их). Сценарий Bash выглядит примерно такПоиск файлов старше X часов с использованием Ruby

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

Конечно, я могу перебрать все файлы вручную применить File.mtime на них, а затем определить те. Однако я хочу понять, есть ли более эффективный, однострочный, чтобы сделать это эффективно.

ответ

8

Один лайнер:

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/') } 
+1

Довольно много, что я думал. Цепочка метода выглядит круто, хотя – Nitin

Смежные вопросы