Perl中两个目录(文件)的按位比较

时间:2012-02-28 18:33:53

标签: perl bit-manipulation

我正在努力实现使用perl

对两个目录中的文件执行按位比较的脚本 (目录名称作为参数传递给命令行中的脚本)。 该脚本应该读取第一个目录和所有子目录中的所有文件,以及 将它们与相应的文件(例如,具有相同名称的文件)进行比较 第二个目录。

脚本的结果 - (PASSED或FAILED)根据以下内容形成: 当第一个目录中的至少一个文件不是按位时,结果为FAILED 等于第二个目录或第二个目录中的相应文件 没有相应的文件。 否则测试通过。

到目前为止,我已经在我创建的这个主题中尝试了这种方法 - Comparing two directories using Perl。经过一段时间后,我意识到我基本上试图模拟“diff -r dir1 dir2”这不是目标,如何在两个目录上执行按位比较操作?

EDIT: Test Case

  /dir1                       /dir2
       -- file1                   -- file1 
       -- file2                   -- file2  
       -- file3 
       -- ....
       -- ...
       ---/subDir1
            --file1
            --file2

file1 of dir1 contains :- foo bar
file1  of dir2 contains :- foo 
Result - Fail

file1  of dir1 contains :- foo bar
file1  of dir2 contains :- foo bar
Result - Pass.

该脚本本质上应该提取具有相同名称的文件存在于不同的目录中。

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

  1. 打开dir1
  2. 将所有文件名读入数组
  3. 打开dir2
  4. 将所有文件名读入数组
  5. 对于dir1中的文件名与dir2中的文件名匹配或反之亦然的任何情况,开始比较逻辑
  6. 使用Digest :: MD5 here执行两个文件的MD5比较。如果即使一位关闭,您将获得不同的校验和。
  7. Digest :: MD5的代码示例......

     use Digest::MD5 qw(md5 md5_hex md5_base64);
     $digest = md5($data);
     $digest = md5_hex($data);
     $digest = md5_base64($data);
     # OO style
     use Digest::MD5;
     $ctx = Digest::MD5->new;
     $ctx->add($data);
     $ctx->addfile(*FILE);
     $digest = $ctx->digest;
     $digest = $ctx->hexdigest;
     $digest = $ctx->b64digest;
    

    为每个文件生成MD5哈希值并进行比较,然后相应地传递或失败。