http://qs321.pair.com?node_id=846587


in reply to Seeking a better way to monitor a file's change

Thanks for your suggestion!

I found the following code can monitor the file's delete, rename or ctreat in one directory, so, when I delete one file, it printed a message "file deleted: ...", but when I made some changes on one of the txt files in that directory and saved it, there was no message printed out, can anyone tell me what was the problem in the following codes? Or, actually the code can't monitor the change in file's size?

Thanks in advance!

#!/usr/bin/perl use strict; use warnings; use Carp; use File::Monitor; $| = 1; my $monitor = File::Monitor->new; push @ARGV, '.' unless @ARGV; while ( my $obj = shift ) { $monitor->watch( { name => $obj, recurse => 1 } ); } my @attr = qw( deleted mtime ctime uid gid mode size files_created files_deleted ); while ( 1 ) { sleep 1; for my $change ( $monitor->scan ) { print $change->name, " changed\n"; for my $attr ( @attr ) { my $val; if ( $attr =~ /^files_/ ) { my @val = $change->$attr; $val = join( ' ', @val ); } else { $val = $change->$attr; } if ( $val ) { printf( "%14s = %s\n", $attr, $val ); } } } }