closer to recursive alias additions
[feisty_meow.git] / scripts / files / filename_helper.pl
index 4117df89b06a55630f29e92174028601331cb22a..2205cf96224a47e349442f054d3b8b9bcf25fd63 100644 (file)
@@ -400,26 +400,119 @@ sub upper {
 # recursively deletes a directory that is passed as the single parameter.
 # from http://developer.novell.com/wiki/index.php/Recursive_Directory_Remove
 sub recursive_delete {
-
-#hmmm: this should iterate across all params.
-  my $dir = shift;
-
-  if ( -f "$dir" ) {
+  my $dir;
+  foreach $dir (@_) {
+    if ( -f "$dir" ) {
 print "this is not a dir: $dir\nshould whack it here?\n";
 return;
+    }
+
+    local *DIR;
+    opendir DIR, $dir or die "opendir $dir: $!";
+    while ($_ = readdir DIR) {
+      next if /^\.{1,2}$/;
+      my $path = "$dir/$_";
+      unlink $path if -f $path;
+      recursive_delete($path) if -d $path;
+    }
+    closedir DIR;
+    rmdir $dir or print "error - $!";
+  }
+}
+
+############################################################################
+
+# finds any directories under the arguments, which can be a list of directories.
+sub find_directories {
+  my @dirs_found = ();
+  my $dir;
+  foreach $dir (@_) {
+printf "FD outer dir: $dir\n";
+    local *DIR;
+    opendir DIR, $dir or die "opendir $dir: $!";
+    while ($_ = readdir DIR) {
+      # skip if it's current or parent dir.
+      next if /^\.{1,2}$/;
+      my $path = "$dir/$_";
+      # skip if this entry is not itself a directory.
+      next if ! -d $path;
+printf "FD adding $path to our list.\n";
+      push @dirs_found, $path;
+    }
+    closedir DIR;
+  }
+  return @dirs_found;
+}
+
+############################################################################
+
+# given a directory, this returns an array of all the filenames found therein.
+sub find_files {
+  my @files_found = ();
+  my $dir;
+  foreach $dir (@_) {
+#printf "LFN outer dir: $dir\n";
+    local *DIR;
+    opendir DIR, $dir or die "opendir $dir: $!";
+    while ($_ = readdir DIR) {
+      # skip if it's current or parent dir.
+      next if /^\.{1,2}$/;
+      my $path = "$dir/$_";
+      # skip if this entry is not a file.
+      next if ! -f $path;
+#printf "LFN adding $path to our list.\n";
+      push @files_found, $path;
+    }
+    closedir DIR;
   }
+  return @files_found;
+}
 
-  local *DIR;
-  opendir DIR, $dir or die "opendir $dir: $!";
-  my $found = 0;
-  while ($_ = readdir DIR) {
-    next if /^\.{1,2}$/;
-    my $path = "$dir/$_";
-    unlink $path if -f $path;
-    recursive_delete($path) if -d $path;
+############################################################################
+
+# finds all directories starting at a particular directory and returns them
+# in an array.  does not include the starting directory.
+sub recursive_find_directories {
+
+#fix this
+
+#flush not working!
+$|++;
+  my @dir_list = @_;
+printf "got into find dirs, args are: @dir_list\n";
+  my @to_return = ();
+  my $dir;
+  foreach $dir (@dir_list) {
+printf "outer dir: $dir\n";
+    local *DIR;
+    opendir DIR, $dir or die "opendir $dir: $!";
+    while ($_ = readdir DIR) {
+      # skip if it's current or parent dir.
+      next if /^\.{1,2}$/;
+      my $path = "$dir/$_";
+      # skip if this entry is not itself a directory.
+      next if ! -d $path;
+      # add to our list if it's a directory.
+printf "adding $path to our list.\n";
+      push @to_return, $path;
+#this isn't needed, right????
+      next;
+    }
+    closedir DIR;
   }
-  closedir DIR;
-  rmdir $dir or print "error - $!";
+
+printf "list before recursion: @to_return\n";
+
+  # return the composition of the list we found here plus any directories under those.
+#hmmm: this is hideous!  it will just grow greater.  can't we do this efficiently?
+
+#hmmm: this causes things to totally fail.  what is going on???
+  my @subs_found ;
+@subs_found = recursive_find_directories(@to_return);
+
+  push(@to_return, @subs_found);
+
+  return @to_return;
 }
 
 ############################################################################