Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Ver. 1.2: Compare Directories and List Changed or Missing Files

by sierrathedog04 (Hermit)
on Sep 19, 2001 at 21:03 UTC ( #113408=note: print w/ replies, xml ) Need Help??


in reply to Compare Directories and List Changed or Missing Files

# 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 wil +l 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 directo +ry enclosed in quotes. \n"; + chomp $targetDir; + $targetDir =~ s#/$##; # Removes any trailing forward slash from the di +rectory. 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 directo +ry \nto which you wish to copy all modified files."; } } if (defined $createdDir){ unless (-d $createdDir) { die "$createdDir is not a valid created directory. \nP +lease 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 $m +odifiedDir; } } print "\n...Finished checking source.\n\n\n"; opendir targetDIR, $targetDir; my @alltargetFiles = grep { $_ ne '.' and $_ ne '..' && -f $_} readd +ir targetDIR; foreach (@alltargetFiles) { print "$_ found in target directory $targetDir but not in sour +ce directory $sourceDir\n\n" if File::Compare::compare("$sourceDir/$_ +", "$targetDir/$_") < 0; }


Comment on Ver. 1.2: Compare Directories and List Changed or Missing Files
Download Code
Replies are listed 'Best First'.
Re: Ver. 1.2: Compare Directories and List Changed or Missing Files
by Anonymous Monk on Mar 05, 2012 at 20:53 UTC
    my @alltargetFiles = grep { $_ ne '.' and $_ ne '..' && -f $_} readdir targetDIR;
    ought to be
    my @alltargetFiles = grep { $_ ne '.' and $_ ne '..' && -f "$targetDir/$_"} readdir targetDIR;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://113408]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (11)
As of 2015-07-07 18:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls