#!/usr/bin/perl
use warnings;
use strict;
use Linux::Inotify2;
my $notifier = new Linux::Inotify2 or die "Unable to create new inotify object: $!";
my $mask = IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_MOVED_FROM | IN_MOVED_TO | IN_MOVE_SELF;
do_dir(".");
while() {
my @events = $notifier->read;
unless(@events > 0) {
print "read error: $!";
last;
}
foreach my $event ( @events ) {
print $event->fullname." was created\n" if $event->IN_CREATE;
print $event->fullname." was deleted\n" if $event->IN_DELETE;
do_dir($event->fullname) if $event->IN_CREATE and -d $event->fullname;
}
}
sub do_dir {
my $dir = shift;
$notifier->watch($dir, $mask);
opendir(my $dh, $dir) or die "Could not open dir $dir: $!";
while(readdir($dh)) {
next if $_ eq "." or $_ eq "..";
do_dir($dir."/".$_) if -d $dir."/".$_;
}
closedir($dh);
}