Ed wrote:
> I'm having a difficult time finding a way to traverse a directory structure
> and then perform some simple operations on files in the directories.
>
> I want to traverse a directory structure and then remove the oldest file in
> each subdirectory. Something like this:
>
> ## traverse the directories and in each directory, if there are at least N
> files in the directory, in remove the oldest file in that directory.
> ##
> foreach($dir (@dirs) )
> {
> ## if $dir has > N files of "*.ext"
> ## unlink the oldest one.
> }
>
> I've been Looking at File::Find but I'm baffled by the examples and usage
> and the "wanted" function.
>
> Where can I look to find some modules and functions for this?
This may help get you started:
#!/usr/bin/perl
use warnings;
use strict;
use File::Find;
# Get the directory from the command line
# or use the current directory
my $search = shift || '.';
# Get an array of all subdirectories
my @dirs;
find sub { push @dirs, $File::Find::name if -d }, $search;
for my $dir ( @dirs ) {
opendir my $dh, $dir or do {
warn "Cannot open '$dir' $!";
next;
};
my ( $name, $time ) = ( '', ~0 );
while ( my $file = readdir $dh ) {
my $mtime = ( stat "$dir/$file" )[ 9 ] or do {
warn "Cannot stat '$dir/$file' $!";
last;
};
( $name, $time ) = ( $file, $mtime ) if -f _ and $time > $mtime;
}
unlink "$dir/$name" or warn "Cannot unlink '$dir/$name' $!";
}
__END__
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>