我从here获得了一个代码,用于递归地比较目录中存在的所有文件的差异
#!/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 :(得分:0)
解决方案1
根据DirCompare documentation,您可以为比较函数(cmp)提供第四个参数并进行自定义测试。
解决方案2
另一种方法是为排除的目录名测试$ dir1和$ dir2,并且只有在不排除$ dir1和$ dir2时才设置$等于0。
if ( not_excluded($dir1) && not_excluded($dir2) ) {
$equal = 0;
}
(not_excluded是您编写的自定义函数,如果未排除dir,则返回true)