我正在编写一个监视文件以进行更改的Perl脚本。
#!/usr/bin/perl
use strict;
use Linux::Inotify2;
my $inotify = new Linux::Inotify2 or die $!;
my $filename = "/tmp/foo";
my $counter = 0;
$inotify->watch (
$filename,
IN_MODIFY,
sub {
++$counter;
print "changed: $counter\n";
}
) or die $!;
1 while $inotify->poll;
如果我像这样测试它,每次/ tmp / foo改变时,这个处理程序被调用两次(递增$ counter两次):
echo abc > /tmp/foo
为什么?
答案 0 :(得分:4)
>首先截断文件(我认为它本身也是一个修改)。尝试使用>>。
答案 1 :(得分:4)
使用>>
作为@Lajos Veres建议,或者关注CLOSE_WRITE
事件(Linux::Inotify2
模块IN_CLOSE_WRITE),
echo > /tmp/foo
inotifywait -m /tmp/foo
Setting up watches.
Watches established.
/tmp/foo MODIFY
/tmp/foo OPEN
/tmp/foo MODIFY
/tmp/foo CLOSE_WRITE,CLOSE