Отказ от ответственности: это может быть излишним, но, с другой стороны, может быть быстрее для реализации и более стабильным.
Существует рубиновая библиотека с именем directory_watcher , которая может отслеживать каталоги на наличие изменений.
Простой скрипт, такой как
#!/usr/bin/env ruby
require 'rubygems'
require 'directory_watcher'
dw = DirectoryWatcher.new '.'
dw.add_observer do
|*args| args.each do |event|
puts event
end
end
dw.start
gets # when the user hits "enter" the script will terminate
dw.stop
может помочь вам начать. Здесь измененные (или удаленные или добавленные) имена файлов просто выводятся на стандартный вывод.
Вот пример примера сценария , который будет следить за file1.txt
, file2.txt
, file3.txt
. Всякий раз, когда один из них изменяется, он объединяет их в files-combined.txt
.
#!/usr/bin/env ruby
require 'rubygems'
require 'directory_watcher'
dw = DirectoryWatcher.new '.'
dw.interval = 1.0
dw.add_observer do |*args|
args.each do |event|
if /file\d/ =~ event.path
`cat file1.txt file2.txt file3.txt > files-combined.txt`
puts "#{Time.now.strftime("%I:%M:%S")} \
Created files-combined.txt (since #{event.path} #{event.type})"
end
end
end
dw.start
gets # when the user hits "enter" the script will terminate
dw.stop
Вывод будет выглядеть так:
$ ruby 7083085.rb
08:55:47 Created files-combined.txt (since ./file3.txt added)
08:55:47 Created files-combined.txt (since ./file1.txt added)
08:55:47 Created files-combined.txt (since ./file2.txt added)
08:55:54 Created files-combined.txt (since ./file1.txt modified)
08:55:57 Created files-combined.txt (since ./file1.txt modified)