比较两个目录中常规文件的差异

时间:2012-10-23 02:00:30

标签: perl file directory compare

需要比较两个目录,并检查两个目录中的每个文件是否有相同名称的文件,如果出现相同的名称,则检查文件是否具有相同的内容,如果是,则打印>档案<。如果文件具有相同的名称但不具有相同的内容<档案>如果文件不在目录2中但在目录1中<<< file1,同样>>> file2用于dir 2中的文件,但不是dir 1。 我遇到了麻烦,我的代码甚至在我测试时都没有比较,看看文件是否相同。

#!/usr/bin/perl -w 
use File::Basename;

@files1 = `/usr/bin/find $ARGV[0] -print`;
chop @files1;
@files2 = `/usr/bin/find $ARGV[1] -print`;
chop @files2;

here: 
for ($i=1; @files1 >= $i; $i++) {

    for ($x=1; @files2 >= $x; $x++) {

        $file1 = basename($files1[$i]); 
        $file2 = basename($files2[$x]); 

        if ($file1 eq $file2) {

            shift @files1;
            shift @files2;

            $result = `/usr/bin/diff -q $files1[$i] $files2[$x]`;
            chop $result;

            if ($result eq "Files $files1[$i] and $files2[$x] differ") { 

                print "< $file1 >\n";
                next here;
            } 
            else { 

                print "> $file1 <\n";
            }
        }
        else  { 

            if ( !-e "$files1[$i]/$file2") { print ">>> $file2\n";}
            unless ( -e "$files2[$x]/$file1") { print "<<< $file1\n";}
        }
    }
}

1 个答案:

答案 0 :(得分:3)

尝试使用:

diff -aqr /dir1 /dir2

或:

#!/bin/bash

for f;
    for g; do
        [[ "$f" != "$g" ]] &&
            cmp &>/dev/null "$f" "$g" || echo "$f is different of $g"
    done
done

使用此

./script dir1/* dir2/*