Sorry I miss understood your requirement in my previous post this will compaire the content of the files too but it will only tell you whethr they are equal or not if you need a more detailed report you will need to change the logic of compreFiles method
compare("c:","D:"); sub compare($$){ my ($p1, $p2) [EMAIL PROTECTED]; print "comparing $p1 and $p2\n"; opendir(DIR1, $p1); my @dirList1 = readdir(DIR1); closedir(DIR1); opendir(DIR2, $p2); my @dirList2 = readdir(DIR2); closedir(DIR2); my %hash1; my %hash2; foreach my $item (@dirList1){ $hash1{$item} = 1; } foreach my $item (@dirList2){ $hash2{$item} = 1; } my $c=0; print "\nList of items that are in $p1 but not in $p2\n"; foreach my $key (sort keys %hash1){ if ($hash2{$key}!=1){ print "$key\n"; $c++ } } print "Number of items that are in $p1 but not in $p2 - $c\n"; $c=0; print "\nList of items that are in $p2 but not in $p1\n"; foreach my $key (sort keys %hash2){ if ($hash1{$key}!=1){ print "$key\n"; $c++; } } print "Number of items that are in $p2 but not in $p1 - $c\n"; print "_______________________\n"; foreach my $key (sort keys %hash1){ if (($hash2{$key}==1)&&(isSubDirectory($p1,$key))&&(isSubDirectory($p2,$key))){ compare($p1 . "\\" . $key, $p2 . "\\" . $key); }else{ compareFile($p1 . "\\" . $key, $p2 . "\\" . $key) } } } sub isSubDirectory($$){ my ($path, $item)[EMAIL PROTECTED]; #print "$path, $item\n"; my $myItem = $path. "\\" . $item; if ($item =~m/^(\.)+$/){ return 0; } if (-d $myItem){ return 1; }else{ return 0; } } sub compareFile($$){ my($f1, $f2) [EMAIL PROTECTED]; print "Comparing $f1 and $f2\n"; my $fd1 = loadFile($f1); my $fd2 = loadFile($f2); if ($fd1 eq $fd2){ print "File $f1 and $f2 has the same content\n"; }else{ print "Content of $f1 and $f2 are different\n" } } sub loadFile($){ my ($f) = @_; open(MYFILE, "<$f"); binmode($f); my $data =<MYFILE>; close(MYFILE); return $data; } LRMK ----- Original Message ----- From: "sudhindra k s" <[EMAIL PROTECTED]> To: "LRMK" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Thursday, June 24, 2004 11:39 AM Subject: Re: Re: Comparing Directories Hi Thanks. I tried this script. It compares the filenames within the directory very well. But i want to compare even the contents and report the differences between the files. Regards Sudhindra On Tue, 22 Jun 2004 LRMK wrote : > >This must do the <A TITLE="Click for more information about job" STYLE="text-decoration: none; border-bottom: medium solid green;" HREF="http://search.targetwords.com/u.search?x=5977|1||||job|AA1VDw">job</A> but there must be a more nice looking way of doing this > > >Code >___________________________________________________________ > >compare("c:\\program files","d:\\program files"); #Example call > > >sub compare($$){ > my ($p1, $p2) [EMAIL PROTECTED]; > > > print "comparing $p1 with $p2\n"; > > ################################v Loading direcrory 1 > opendir(DIR1, $p1); > my @dirList1 = readdir(DIR1); > closedir(DIR1); > > ################################v Loading direcrory 2 > opendir(DIR2, $p2); > my @dirList2 = readdir(DIR2); > closedir(DIR2); > > my %hash1; > my %hash2; > foreach my $item (@dirList1){ > $hash1{$item} = 1; > } > > foreach my $item (@dirList2){ > $hash2{$item} = 1; > } > > > ################################ Counting the items that are in Path 1 >but not in path 2 > my $c=0; > foreach my $key (sort keys %hash1){ > > if ($hash2{$key}!=1){ > #print "$key\n"; > $c++ > } > > } > print "Number of items that are in $p1 but not in $p2 - $c\n"; > > ################################ Counting the items that are in Path 2 >but not in path 1 > $c=0; > foreach my $key (sort keys %hash2){ > > if ($hash1{$key}!=1){ > #print "$key\n"; > $c++; > } > > } > print "Number of items that are in $p2 but not in $p1 - $c\n"; > >print "_______________________\n"; > > > ####################################################### Comparing Sub >directories > foreach my $key (sort keys %hash1){ > if >(($hash2{$key}==1)&&(isSubDirectory($p1,$key))&&(isSubDirectory($p2,$key))) { > > compare($p1 . "\\" . $key, $p2 . "\\" . $key); > > } > } >} > > > > >#################################### Sub to check whether an item is a valid >sub directory of the given path >sub isSubDirectory($$){ > my ($path, $item)[EMAIL PROTECTED]; > if ($item =~m/^(\.)+$/){ > return 0; > } > my $myItem = $path. "\\" . $item; > if (-d $myItem){ > return 1; > }else{ > return 0; > } > > >} > > > >LRMK >----- Original Message ----- > From: "sudhindra k s" <[EMAIL PROTECTED]> >To: <[EMAIL PROTECTED]> >Sent: Tuesday, June 22, 2004 1:24 PM >Subject: Comparing Directories > > > >Hi > >I have two directories with a path as shown below >c:\test\result\... and d:\test2\result2\... > >The directory stucture and files after these are the same. i.e if there is a >directory xyz within c:\test\result\, there will be a corresponding >directory xyz within d:\test2\result2\ with the file names also being the >same. > >now i want to compare the contents of the directories and output the >difference between the two if any. How can i acheive this? > >Regards >Sudhindra > > > >-- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] ><http://learn.perl.org/> <http://learn.perl.org/first-response> > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>