Linux::Inotify2 でディレクトリを監視してなんかする
あるディレクトリにファイルが置かれたら何かしたい、
みたいにディレクトリを監視して処理を行いたい場合、Linux::Inotify2 が便利ですね。
もちろん、inotify が利用できる環境でしか使えませんが。
下は、ホームディレクトリの”backup”ディレクトリにファイルを置くと"backup_server"にそのファイルをscpします。
watch_and_scp.pl
#!/usr/bin/perl use strict; use warnings; use Linux::Inotify2; my $watch_dir = $ENV{HOME} . '/backup'; my $inotify = Linux::Inotify2->new or die $!; $inotify->watch( $watch_dir, IN_CLOSE_WRITE | IN_MOVED_TO, sub { my $e = shift; my $name = $e->fullname; print $name, "\n"; system( 'scp', $name, "backup_server:~/backup/" ); } ); 1 while $inotify->poll;
ちなみに最後の一行部分は、AnyEvent を使って次のようにも書けますね。
my $inotify_w = AnyEvent->io( fh => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll } ); AnyEvent->condvar->recv;
Linux::Inotify2のドキュメントの通りだと動かなかったので注意(fhの指定とか)
あわせて読みたい -> man inotify