# sierrathedog04, jonathansamuel@yahoo.com, August 2001 # First parameter is the target or VOB directory. # Optional second parameter is the source or current directory. # Ver. 1.1, Sept. 13, 2001. Now uses File::Compare instead of diff; # Modified printouts so only files are listed. (Not directories). # Ver. 1.2 Sept. 19, 2001. Accepts optional parameters 'modified' and 'created' followed by directory names. If these parameters are used then the program will copy all modified files to the modified directory and all changed files to the changed directory. use strict; require File::Compare; use Getopt::Long; my $modifiedDir; my $createdDir; GetOptions("modified:s" => \$modifiedDir, "created:s", => \$createdDir); $| = 1; print "\n"; my $targetDir = shift || die "Please pass the name of a target directory enclosed in quotes. \n"; chomp $targetDir; $targetDir =~ s#/$##; # Removes any trailing forward slash from the directory. unless (-d $targetDir) { die "$targetDir is not a valid target directory.\nPlease pass the name of a valid target directory enclosed in quotes. \n"; } my $sourceDir = shift || "."; unless (-d $sourceDir) { die "$sourceDir is not a valid source directory.\nPlease pass the name of a valid source directory enclosed in quotes. \n"; } if (defined $modifiedDir){ unless (-d $modifiedDir) { die "$modifiedDir is not a valid modified directory. \nPlease use the --modified option to pass the name of a valid directory \nto which you wish to copy all modified files."; } } if (defined $createdDir){ unless (-d $createdDir) { die "$createdDir is not a valid created directory. \nPlease use the --created option to pass the name of a valid directory \nto which you wish to copy all created files."; } } opendir THISDIR, $sourceDir; my @allFiles = grep { $_ ne '.' and $_ ne '..' && -f "$sourceDir/$_"} readdir THISDIR; closedir THISDIR; foreach (@allFiles) { if (File::Compare::compare("$sourceDir/$_", "$targetDir/$_") == 1) { print "$_ in source directory $sourceDir differs from that in target directory $targetDir\n\n"; print `cp $sourceDir/$_ $modifiedDir/$_` if defined $modifiedDir; } elsif (File::Compare::compare("$sourceDir/$_", "$targetDir/$_") < 0) { print "$_ found in source directory $sourceDir but not in target directory $targetDir\n\n"; print `cp $sourceDir/$_ $createdDir/$_` if defined $modifiedDir; } } print "\n...Finished checking source.\n\n\n"; opendir targetDIR, $targetDir; my @alltargetFiles = grep { $_ ne '.' and $_ ne '..' && -f $_} readdir targetDIR; foreach (@alltargetFiles) { print "$_ found in target directory $targetDir but not in source directory $sourceDir\n\n" if File::Compare::compare("$sourceDir/$_", "$targetDir/$_") < 0; }