For Programmers: Free Programming Magazines  


Home > Archive > PERL Beginners > March 2004 > Antwort: Search for a file pattern in a directory tree recursively / Stoting









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Antwort: Search for a file pattern in a directory tree recursively / Stoting
Manfred Beilfuss

2004-03-26, 11:14 pm

Hey Rajesh,

being a beginner in perl fooling around similar problems like you, I ju=
st
have the idea that you might solve the problem by using a hash to store=
the
information about the file's you have already found .

I've used
($FN,$PATH,$EXT) =3D fileparse ($File::Find::name,'\..*') ;
to separate the filename, path and extension of file found by file::fin=
d as
you may see.

What I didn't solve is to store these information in a hash to sort out=

which file's are already found as decribed in chapter 5 of the
perl-cookbook. In chapter 9 of the cookbook they describe how to find t=
he
youngest file of all in a given directory-structure like

use file::find;
@argv =3D ('.' unles @ARGV;
my ( $AGE , $name );
sub youngest {
return if defined $age && $age > ( stat($_)) [9];
$age =3D ( stat(-)) [9];
$name =3D $file::find:.name;
}
find (\&youngest, @ARGV);
print "$name ". scalar(laocaltime($age)) . "\n";

If you join these code-fragments and store filename, path, ext and age =
into
a hash or other structure you should
be able to solve your problem.

If you succeed could you please tell me how ?

Mit freundlichen Gruessen / Best regards

Manfred Beilfuss

Deutsche Verm=F6gensberatung AG
IT_Systemmanagement , DBA
M=FCnchenerstr. 1
60329 Frankfurt
Tel.: +49 (69) 2384 - 639
Fax: +49 (69) 2384 - 329
Mailto:Manfred.Beilfuss@dvag.com


=
=20
"Rajesh Dorairajan" =
=20
<rajesh.dorairajan@tumbl An: "Perl-Begin=
ners (E-mail)" <beginners@perl.org> =20
eweed.com> Kopie: =
=20
Thema: Search for =
a file pattern in a directory tree recursively =20
24.03.2004 04:09 =
=20
=
=20
=
=20




Hello All,

I went through all the documentation and previous mail posts about
File::Find and finally decided I needed some help.

I've a directory structure I need to parse. The directory contains
subdirectories with filenames such as

full094382.db
full483292.db

Now, I need to parse through each subdirectory and pick up the name of =
the
file that was MODIFIED MOST RECENTLY. I do have a sort of a code to sta=
rt
with.

use strict;
use warnings;

$\ =3D "\n";

use File::Find;

my $localdir =3D 'C:/docs';
my @files;

find(
sub { push ( @fullcrls, $File::Find::name ) if /^(full)\w*(\.db)$/ },=

$localdir );

foreach ( @fullcrls ) {
print;
}

However, I am not able to figure how to filter out the repeat entries i=
n a
sub-directory such as

C:/docs/dir1/full094382.db
C:/docs/dir1/full483292.db
C:/docs/dir2/full482952.db
C:/docs/dir2/full930284.db
..
..
..

In the above example, I need only need filename from dir1 and dir2 that=
was
last modified. Is there a way to do this filtration in the find( sub {}=
)
above?

Any help will be deeply appreciated.

Thanks,

Rajesh Dorairajan
rajesh.dorairajan@tumbleweed.com


=



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com