2011-08-16 6 views
3

ファイルの1つが更新されるたびに「cat」する必要がある一連のファイルがあります。たとえば、fileA.txt、fileB.txt、およびfileC.txtがあるとします。 fileA.txtが変更され、ファイルが保存されているとき、私は他のタスクの中で特定のファイルの変更を監視して猫を捉えるシェルスクリプト

cat fileA.txt fileB.txt fileC.txt > combined.txt 

私はファイルを見ていると、この取引を知っているスクリプトを実行する必要がありますが、これにアプローチする方法がわからないと思います。監視スクリプトは、これらのファイルを処理しているときに常に実行され、ファイルセット内のファイルの1つが変更されたときに 'cat'コマンドを実行します。私はMac上で、これがシェルで書かれていると好きです。

ありがとうございます!

答えて

2

免責事項:これは過度の可能性がありますが、反対側では実装が速く安定している可能性があります。

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 

ような単純なスクリプトは、あなたが始めることができます。ここで変更された(または削除された、または追加された)ファイル名はstdoutに出力されます。ここで


file1.txtfile2.txtfile3.txtを監視しますexample script、です。それらのいずれかが変更されるたびに、それらは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) 
+0

が役に立ちます。みくありがとう! – jaysonp

0

tail -f f1.txt f2.txt >> c.txt 

は、f1.txtとf2.txtからc.txtのいずれかに書き込まれる改行を追加します。 c.txtがヘッダーで乱雑にならないようにするには、

tail -qf f1.txt f2.txt >> c.txt 
関連する問題