2017-02-03 4 views
0

я получил код из here сравнить различия во всех файлах присутствуют в каталогах рекурсивноPerl DirCompare исключить каталоги

#!/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'; 

Я хочу, чтобы исключить некоторые из этих каталогов, как .old, .pro, и т.д.

Я не нашел способ сделать это здесь?

ответ

0

раствор 1

Согласно DirCompare documentation, вы можете предоставить четвертый аргумент функции сравнения (КСС) и сделать пользовательский тест.

раствор 2

Другой способ проверить $ dir1 и $ dir2 для исключенных имен каталогов и установить равным $ 0, только если $ dir1 и $ dir2 не исключены.

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

(not_excluded быть пользовательская функция, написанная вами, возвращает истину, если при условии, каталог не исключается)