http://qs321.pair.com?node_id=145000
Category: NT Admin
Author/Contact Info Ray Espinoza ray.espinoza@ebay.com
Description: This script will compare the same directory on two different machines for content, size and mtime.
# Ray Espinoza
# compareDirs.pl
# 2/12/02
# This script will compare two directories, with the first being the t
+emplate
# directory.
######################################################################
+#########

#!D:/perl/bin
use strict;
use File::stat;

######################################################################
+##############
# Declaring my variables.
######################################################################
+##############

my (%hashDir1, $hashDir1, %hashDir2, $hashDir2, $key, $goodDir, $path,
+ $host1, $host2, $checkDir, $currentFile, $currentFileCD, $values, $v
+alues1, $currentFile1, $currentFile2, $currentFileX, $size, $stat, );
my %hashDir1 =();
my %hashDir2 =();

######################################################################
+##############
# Asking for hostnames to process and opening directories.
######################################################################
+##############

print "What host would you like to use as template: ?\n";
chomp($host1 = <STDIN>);

print "Whats the path you want to use? \n";
chomp($path = <STDIN>);
$goodDir = "//" . $host1 . $path;
print "Template directory is : $goodDir" . "\n";
opendir(GD, $goodDir) or die "Can't open $goodDir : $!";

print "what host would you like to examine? \n";
chomp($host2 = <STDIN>);
$checkDir = "//" . $host2 . $path;
opendir(CD, $checkDir) or die "Can't open $checkDir : $!";

print "The log file results.txt will appear in the working directory.\
+n";
open(OUT, ">>results.txt");

######################################################################
+##############
# Reading the contents of the first directory, stating each file and c
+reating a hash.
# Uncomment out the print lines to print the files and or values.
######################################################################
+##############

while($currentFile = readdir(GD)) {
    
    $currentFile1 = "//" . $host1 . $path . $currentFile;
    #print $currentFile1 . "\n";
    $values = stat($currentFile1) or warn "can't stat the file :$!\n";
    #print $values->size . "\n";
    #print $values->mtime. "\n";
    $hashDir1{$currentFile} = {    size =>$values->size,
                                mtime =>$values->mtime,
                                };
    
    }
    
######################################################################
+##############
# Uncomment out if you want to print host1's files and sizes.
######################################################################
+##############

#print "$host1 's Directory has these files with these sizes:\n";
#foreach $key(keys(%hashDir1)){
    
    #print "$key,$hashDir1{$key}{'size'}\n";
    #}

######################################################################
+##############
# Reading the contents of the second directory, stating each file and 
+creating a hash.
# Uncomment out the print lines to print the files and or values.
######################################################################
+##############

while($currentFileCD = readdir(CD)) {
    $currentFile2 = "//" . $host2 . $path . $currentFileCD;
    #print $currentFile2 . "\n";
    $values1 = stat($currentFile2) or warn "can't stat the file: $!\n"
+;
    $hashDir2{$currentFileCD} = {    size =>$values1->size,
                                mtime =>$values1->mtime,
                                };
    
}

######################################################################
+##############
# Does the file exist in host2's directory. if so next statement if no
+t, enter loop.
######################################################################
+##############

foreach $key(keys(%hashDir1)){
    if(!exists ($hashDir2{$key})){
        print "$key doesn't exist on $host2.\n";
        print OUT "$key doesn't exist on $host2.\n";
        next;
        }
        
######################################################################
+##############
# Do the files sizes match?
######################################################################
+##############
    
    elsif(!$hashDir1{$key}{'size'} == $hashDir2{$key}{'size'}){
        print "$key 's sizes don't match on $host2.\n";
        print OUT "$key 's sizes don't match on $host2.\n";
        next;
        }

######################################################################
+##############
# Do the mod times match?
######################################################################
+##############
    
    elsif(!$hashDir1{$key}{'mtime'} == $hashDir2{$key}{'mtime'}){
        print "$key 's modtimes are different on $host2.\n";
        print OUT "$key 's modtimes are different on $host2.\n";
        }


}