#! perl -w
use strict;
use File::Copy;
my $infile = "c:\\doclist1.chr";
my @directories;
# first lets build our directory list
open IN, "<$infile" or die "Couldn't open $infile, $!";
while (<IN>) {
chomp;
my @fields = split /,/;
my $path_str = $fields[6];
do { warn "Empty field 7"; next } unless $path_str;
my @path = split /\\/, $path_str;
# push the directories into an array
push @directories, join "\\", @path[ 0, 5, 6 ];
}
close IN;
# now we have a directory list in @directories let's process it
for my $dir ( @directories ) {
process_dir($dir);
}
exit;
sub process_dir {
my $dir = shift;
do { warn "$dir does not exist!\n"; return } unless -e $dir;
opendir DIR, $dir or do { warn "Could not open $dir $!\n" ; return
+ };
while ( my $file = readdir DIR ) {
next unless -f "$dir\\$file";
next unless $file =~ m/\.rtf$/;
copy( "$dir\\$file", "C:\\testfiles\\$file" )
or die "Failed to copy $file: $!\n";
}
}
Once you have the basic logic working you can add in File::Find if you need to recurse a directory structure in your process dirs sub. There were a lot of problems with your code. Foremost was that you wanted to push a list of directories into @directory but were not pushing and even if you were the my declaration in the loop would erase it every loop.
You actually don't need @directories at all a you can just call process_dirs() in your main loop like this:
#! perl -w
use strict;
use File::Copy;
my $infile = "c:\\doclist1.chr";
open IN, "<$infile" or die "Couldn't open $infile, $!";
while (<IN>) {
chomp;
my @fields = split /,/;
my $path_str = $fields[6];
do { warn "Empty field 7"; next } unless $path_str;
my @path = split /\\/, $path_str;
my $dir = join "\\", @path[ 0, 5, 6 ];
process_dir($dir);
}
close IN;
sub process_dir {
my $dir = shift;
do { warn "$dir does not exist!\n"; return } unless -e $dir;
opendir DIR, $dir or do { warn "Could not open $dir $!\n" ; return
+ };
while ( my $file = readdir DIR ) {
next unless -f "$dir\\$file";
next unless $file =~ m/\.rtf$/;
copy( "$dir\\$file", "C:\\testfiles\\$file" )
or die "Failed to copy $file: $!\n";
}
}
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
|