2017-02-03 1 views
0

ich einen Code von here bekam die Unterschiede in allen Dateien in den Verzeichnissen rekursivPerl DirCompare ausschließen dirs

#!/usr/bin/perl 

use strict; 
use warnings; 

use File::DirCompare; 
use File::Basename; 

sub compare_dirs 
{ 
    my ($dir1, $dir2) = @_; 
    my $equal = 1; 

    File::DirCompare->compare($dir1, $dir2, sub { 
    my ($a,$b) = @_; 
    $equal = 0; # if the callback was called even once, the dirs are not equal 

    if (!$b) 
    { 
     printf "File '%s' only exists in dir '%s'.\n", basename($a), dirname($a); 
    } 
    elsif (!$a) { 
     printf "File '%s' only exists in dir '%s'.\n", basename($b), dirname($b); 
    } 
    else 
    { 
     printf "File contents for $a and $b are different.\n"; 
    } 
    }); 

    return $equal; 
} 

print "Please specify two directory names\n" and exit if (@ARGV < 2); 
printf "%s\n", &compare_dirs($ARGV[0], $ARGV[1]) ? 'Test: PASSED' : 'Test: FAILED'; 

Ich möchte vergleichen einige der Verzeichnisse wie .old auszuschließen, .pro, usw.

Ich finde keinen Weg, dies hier zu tun?

Antwort

0

Lösung 1

Nach dem DirCompare documentation, können Sie ein viertes Argument an die Funktion vergleichen, bieten (cmp) und einen benutzerdefinierten Test durchführen. 2

Lösung

Ein anderer Weg ist $ dir1 und $ dir2 für ausgeschlossen Verzeichnisnamen zu testen, und wenn $ gleich 0 nur gesetzt werden $ dir1 und $ dir2 nicht ausgeschlossen.

if (not_excluded($dir1) && not_excluded($dir2)) { 
$equal = 0; 
} 

(not_excluded eine benutzerdefinierte Funktion von Ihnen geschrieben wird, gibt true zurück, wenn vorgesehen dir nicht ausgeschlossen ist)