使用 File::ChangeNotify 模块监视文件夹时,如何获取被修改的文件

Sha*_*esh 2 perl file monitor

#!/opt/perl_5.18.2/linux50/bin/perl

use strict;
#use warnings;

use File::ChangeNotify;

$| = 1;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ '/var/icc_shantesh/logs' ],
    filter      => qr/\.log/,
);

while ( my @events = $watcher->wait_for_events ) {
    print "loop got executed\n";
    print "File name: $_\n";
}
Run Code Online (Sandbox Code Playgroud)

File::ChangeNotify在我的研发环境中使用了上面的代码。该脚本监视文件夹并在发生更改时通知。我想知道已更改文件的名称及其更新内容

bol*_*lav 5

@events数组具有您想要的信息:

 while (my @events = $watcher->wait_for_events){
    print "loop got executed\n";
    foreach my $event (@events) {
        print "File name: " . $event->path . "\n";
    }
 }
Run Code Online (Sandbox Code Playgroud)

该数组包含File::ChangeNotify::Event对象,并且它们具有path文件名的访问器,以及type已完成的更改类型。

您可以查看手册页上的示例并将代码重写为:

 for my $event ( $watcher->new_events() ) {
     print "File name: ", $event->path(), ' - ', $event->type(), "\n";
 }
Run Code Online (Sandbox Code Playgroud)

$_是 perl 的默认变量,但是当您像在循环中那样显式设置变量时 ( my @events = ...)$_没有被使用。