Perl DirCompare不包括dirs

时间:2017-02-03 07:18:17

标签: perl directory

我从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等。

我在这里找不到办法吗?

1 个答案:

答案 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)