Hello:

You can try File::Find.

It will serve your purpose.

Dinakar




Narendran Kumaraguru Nathan wrote:

> Hai Raghavan,
>     I think you aren't aware of the unix command 'find'.
> Just try
> > find . -file <filename>
> Next I've made your program to work, just try this out. I hope
> the changes I've made is clear for yor.
>
> #! /usr/local/bin/perl -w
>
> use strict;
> my @dirList;
> my $fileName;
> my $srcDir;
> my $findRet;
>
> $fileName    = shift || die "Usage : <program_name> <file_name_to_search_for>
> <optional_directory_name> : $!";
> $dirList[0]  = shift || '.';
> chomp ($fileName);
> chomp ($dirList[0]);
>
> while ($srcDir = shift (@dirList)) {
>   $findRet = &findFileinDir ($fileName, $srcDir);
>   if ($findRet == -1) {
>     print "Cannot open directory $srcDir for reading\n";
>   }
>   last if ($findRet == 1);
> }
>
> if ($findRet != 1) {
>   print "File not found\n";
> }
>
> sub findFileinDir {
>   my $srchFile = $_[0];
>   my $srchDir  = $_[1];
>   my $fileInDir;
>
>   opendir DIRHNDL, $srchDir or return -1;
>
>   foreach $fileInDir (grep !/^\.\.?$/, readdir DIRHNDL) {
>     if (-d $srchDir."/".$fileInDir) {
>       my $subDir = $srchDir;
>       chomp ($subDir);
>       $subDir = $subDir."/".$fileInDir;
>       push (@dirList, $subDir);
>     }
>     elsif ($fileInDir eq $srchFile) {
>       print "$srchDir/$fileInDir\n";
>       return 1;
>     }
>   }
>   closedir (DIRHNDL);
>   return 0;
> }
>
> --------
> I've long back writtern a shell script, think that may help your understanding
>
> # This program searches for a file in pwd & subdirectories
> if [ $1 ]
> then
>   file=$1
>   if [ $2 ]
>   then
>     cd $2
>   fi
>   for list in *
>   do
>     if [ -d $list ]
>     then
>       $0 $file `pwd`/$list
>     else
>       if [ "`echo $list | grep -i $file`" ]
>       then
>         echo `pwd`/$list
>       fi
>     fi
>   done
> else
>   echo "Usage 'dlook filename directoryname'"
> fi
>
> ------------
>
> Thanks & Regards,
> Naren.
>
> "Sudarsan.Raghavan" wrote:
>
> > Hello,
> >
> > I am new to perl. I want to find for a file recursively within a
> > directory. Is there a perl module already present that will do the job
> > for me, or do I have to write my own.
> > My attempt at the same I am trying this on a VMS machine.
> >
> > #Begin searchDirforFile.pl
> > #Usage perl searchDirforFile.pl <filename> <Directory (optional,
> > defaults to current Directory)>
> > use strict;
> > my @dirList;
> > my $fileName;
> > my $srcDir;
> > my $findRet;
> >
> > $fileName    = shift;
> > $dirList[0]  = shift || '.';
> > chomp ($fileName);
> > chomp ($dirList[0]);
> >
> > while ($srcDir = shift (@dirList)) {
> >   $findRet = &findFileinDir ($fileName, $srcDir);
> >   if ($findRet == -1) {
> >     print "Cannot open directory $srcDir for reading\n";
> >   }
> >   last if ($findRet == 1);
> > }
> >
> > if ($findRet != 1) {
> >   print "File not found\n";
> > }
> >
> > sub findFileinDir {
> >   my $srchFile = $_[0];
> >   my $srchDir  = $_[1];
> >   my $fileInDir;
> >
> >   opendir DIRHNDL, $srchDir or return -1;
> >
> >   while ($fileInDir = readdir DIRHNDL) {
> >     $fileInDir =~ s/\.dir\Z//;
> >
> >     if (-d $srchDir.$fileInDir) {
> >       my $subDir = $srchDir;
> >       chop ($subDir);
> >       $subDir = $subDir.".".$fileInDir."]";
> >       push (@dirList, $subDir);
> >     }
> >     elsif ($fileInDir eq $srchFile) {
> >       print "$srchDir\n";
> >       print "$fileInDir\n";
> >       return 1;
> >     }
> >   }
> >   closedir (DIRHNDL);
> >   return 0;
> > }
> >
> > Thanks,
> > Sudarsan
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to