common/tools/listdir.pl
changeset 78 52cc4f7310db
parent 39 9edae8fe1416
child 108 d33d43677cdf
equal deleted inserted replaced
77:89903a4399c7 78:52cc4f7310db
     1 #!perl -w
     1 #!perl -w
     2 use strict;
     2 use strict;
     3 
     3 
     4 my $dir      = shift or die "Usage: $0 <dir> \n";   #  provided dir to traverse
     4 my $dir      = shift or die "Usage: $0 <dir> \n";   #  provided dir to traverse
     5 my $filelist = [];
     5 my $filelist = [];
       
     6 my $init = $dir = lc($dir);
       
     7 $init =~ s{\\}{\\\\};
     6 
     8 
     7 # fwd declaration to prevent warning
     9 # fwd declaration to prevent warning
     8 sub recursedir($$);
    10 sub recursedir($$);
     9 
    11 
    10 # run recurse and print
    12 # run recurse and print
    11 recursedir ($dir, $filelist);
    13 recursedir ($dir, $filelist);
       
    14 
    12 print $_, "\n" for(@$filelist);
    15 print $_, "\n" for(@$filelist);
    13 
    16 
    14 sub recursedir($$) {
    17 sub recursedir($$) {
    15 
    18 
    16   my $dir  = shift @_;
    19   my $dir  = shift @_;
    17   my $list = shift @_;
    20   my $list = shift @_;
    18 
    21 
    19   if(opendir(DIR, "$dir")) {
    22   if(opendir(DIR, "$dir")) {
    20     #  list dir
    23     #  list dir
    21     for my $file(grep { !/^\./ } readdir DIR) {
    24     for my $file(grep { !/^\./ } readdir DIR) {
    22       if(-d "$dir\\$file") {
    25       if(-d "$dir/$file") {
    23         #  traverse subdirs
    26         #  traverse subdirs
    24         recursedir("$dir\\$file", $list);
    27         recursedir("$dir/$file", $list);
    25       }
    28       }
    26       elsif(-f "$dir\\$file") {
    29       elsif(-f "$dir/$file") {
    27         #  if file then swap (any present) fwd to bkslash and add to list        
    30         my $formatted = lc($dir)."/".lc($file);
    28         $dir   =~s/\//\\/;
    31         $formatted =~ s!$init/!!;
    29         $file  =~s/\//\\/;
    32         push @$list, $formatted;
    30         push @$list, "$dir\\$file";
       
    31       }
    33       }
    32     }
    34     }
    33     closedir DIR;
    35     closedir DIR;
    34   }
    36   }
    35   else {
    37   else {