Hi Mimi,

I could think of a replacement of "ls -R" command of unix in windows. It's "dir 
/S".

Recursive function call is a one way to do the same.

You can try File::Find as well: 
http://search.cpan.org/~lbrocard/perl5.005_04/lib/File/Find.pm

Thanks,
Ajay

-----Original Message-----
From: Mimi Cafe [mailto:[EMAIL PROTECTED]
Sent: Monday, January 28, 2008 5:25 PM
To: beginners@perl.org
Subject: Process Directory and subdirectories Recursively


Hi,

I am trying to process a directory and all subdirectory recursively and
generate a list as the Unix command "ls -R" will display, but this seems not
to behave as it should.
My script only goes as far as processing the directory and the 1 step below
not more.

I have some like, but the script goes as far as 1_child and 2_child but no
further:
/parent/1_child/1_grant_child/././
/parent/2_child/2_grant_child/././

The script will finally be used on Windows OS,  Unix system command cannot
be used.

Can anyone help?

Regards

Mimi

###############################################################
#!/usr/bin/perl -w


# Recursively read content of a folder and dynamically create a list on an
html page.

use CGI qw(:standard);
#use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
#use warnings;
use strict;



print header(),
 start_html("Documents list");
print "<h1> Documents List</h1><br>\n";

my $source = "/depot/my_directory";

opendir (SOURCE, $source) or die "Cannot open the source folder for reading:
$!\n";

my $file;
while (defined($file = readdir(SOURCE))){
 next if $file =~ /^\.{1,2}$/;
 my $full_name = "$source/$file";
 if (-d $full_name){
  #my $full_name = "$source/$file";
  print qq(<b>$file</b><br>);
  process($full_name);
 }else{
  print qq(<a href="$full_name>$file</a><br>);
 }
 #next;
}
closedir (SOURCE);


print end_html();



# Subroutine to process subdirectory and list content.

sub process{

 my ($path, $file, @files, $file_full_path);
 $path = shift;
 opendir (SUBDIR, $path) or die "Cannot open the subfolder for reading:
$!\n";

 @files = sort grep {!/^\.{1,2}$/} readdir(SUBDIR);
 closedir (SUBDIR);

 for (@files){
  $file_full_path = "$path/$_";

  if (-d $_){
   print qq(<b>$_</b><br />);
   process($_);


  }else {

   print qq(<a href="$file_full_path">$_</a><br />);

  }

 }


}
#######################################################

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to