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 ); } } } }

Replies are listed 'Best First'.
Re^2: Seeking a better way to monitor a file's change
by repellent (Priest) on Jun 26, 2010 at 03:21 UTC
    See File::Monitor::Delta. The module is able to monitor changes to file size.

    A file can change in many ways. What exactly would you consider a file "change"? Perhaps checking the file's modified time mtime is sufficient enough for your needs?

    If you're interested in whether the contents of the file changed, you may want to look at Digest::file.