newfolders.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:46 2010 from newfolders.pl 2007/03/19 3.8 KB.

#!/perl -w
# NAME: newfolders.pl
# AIM: given two folders, do a resursive search and report new folder,
# or folders in the first not in the second
# input: first_folder second_folder
use strict;
use warnings;
require 'logfile.pl' or die "Unable to load logfile.pl ...\n";
# log file stuff
my ($LF);
my $outfile = 'temp.'.$0.'.txt';
if ($0 =~ /\w{1}:\\.*/) {
   my @tmpsp = split(/\\/,$0);
   $outfile = 'temp.'.($tmpsp[-1]).'.txt';
}
open_log($outfile);
prt( "$0 ... Hello, World ...\n" );
# DEBUG ONLY
my $dbg1 = 1;   # use default inputs
#my $dffolder = 'C:\FGCVS\OpenSceneGraph';
#my $dsfolder = 'C:\FG\12\OpenSceneGraph';
my $dffolder = 'C:\FGCVS\OpenAL';
my $dsfolder = 'C:\FG\12\OpenAL';
my $dbg2 = 0;   # show folder count as it happens
my $ffolder = '';
my $sfolder = '';
parse_args( @ARGV );
if ( ! -d $ffolder) {
   mydie( "ERROR: $ffolder is NOT a DIRECTORY!\n" );
}
if ( ! -d $sfolder) {
   mydie( "ERROR: $sfolder is NOT a DIRECTORY!\n" );
}
prt( "Processing first=$ffolder, second=$sfolder ...\n" );
my @first = ();
my @second = ();
my $tcnt = 0;
my $gcnt = 0;
@first = process_folder( $ffolder, 0 );
@second = process_folder( $sfolder, 0 );
my $cnt1 = scalar @first;
my $cnt2 = scalar @second;
$gcnt += $tcnt;
prt( "Found first $cnt1, 2nd $cnt2 directories ... $gcnt total ...\n" );
my @newfolders = ();
my $dir1 = '';
my $dir2 = '';
my $ds1 = '';
my $ds2 = '';
my $fnd = 0;
my $tot = ($cnt1 * $cnt2);
my $icnt = 0;
prt( "Moment ... processing 2nd, comparing to 1st, to get NEW folders ... up to $tot interations ...\n" );
foreach $dir1 (@second) {
   $ds1 = submain( $dir1, $sfolder );
   $fnd = 0;
   foreach $dir2 (@first) {
      $ds2 = submain( $dir2, $ffolder );
      if (uc($ds1) eq uc($ds2)) {
         $fnd = 1;
         last;
      }
      $icnt++;
      if (($icnt % 15000) == 0) {
         prt( "Done $icnt of $tot ...\n" );
      }
   }
   if ($fnd == 0) {
      push(@newfolders, $dir1);
   }
   $tot -= $cnt1;
}
prt( "Done $icnt of $tot ...\n" );
prt( "Found ".scalar @newfolders." new folders in $sfolder ...\n" );
foreach $dir1 (@newfolders) {
   ##$ds1 = submain($dir1, $sfolder);
   prt( "xdelete -dfr \"$dir1\"\n" );
}
close_log($outfile,1);
exit(0);
###############################
# subs only
sub submain {
   my ($d, $m) = @_;
   return substr($d, length($m)+1);
}
sub process_folder {
   my ($in, $level) = @_;
   if ($level == 0) {
      prt( "\nProcessing folder $in ... \n" );
   }
   my @dirs = ();
   if ( !opendir(DIR, $in) ) {
      prt( "ERROR: Unable to open directory [$in] ...\n" );
      return @dirs;
   }
   my @files = readdir(DIR);
   closedir DIR;
   my $cnt = 0;
   foreach my $file (@files) {
      if (($file eq '.') || ($file eq '..')) {
         next;
      }
      $cnt++;
      my $ff = $in . '\\' . $file;
      if ( -d $ff ) {
         push(@dirs, $ff);
         $tcnt++;
      }
   }
   my $cnt2 = scalar @dirs;
   prt( "Found $cnt items, $cnt2 directories ...\n" ) if $dbg2 && ($cnt2 > 0);
   my @sdirs = @dirs;
   foreach my $dir (@sdirs) {
      my @subdirs = process_folder($dir, ($level + 1));
      foreach $dir (@subdirs) {
         push(@dirs, $dir);
      }
   }
   if ($tcnt > 1000) {
      $gcnt += $tcnt;
      prt( "Got $gcnt folders, so far ...\n" );
      $tcnt = 0;
   }
   return @dirs;
}
sub parse_args {
   my (@av) = @_;
   while (@av) {
      my $arg = shift @av;
      if (length($ffolder)) {
         if (length($sfolder)) {
            prt( "ERROR: Already have first=$ffolder, second=$sfolder ...\n" );
            mydie( "Only input is first_folder second_folder ...\n" );
         }
         $sfolder = $arg;
      } else {
         $ffolder = $arg;
      }
   }
   if ( !length($ffolder) || !length($sfolder) ) {
      if ($dbg1) {
         if (!length($ffolder)) {
            $ffolder = $dffolder;
         }
         if (!length($sfolder)) {
            $sfolder = $dsfolder;
         }
      } else {
         prt( "ERROR: Two folder names not found!\n" );
         mydie( "Useage: first_folder second_folder ...\n" );
      }
   }
}
# eof = newfolders.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional