2

需要比较两个目录,并检查两个目录中的每个文件是否有同名文件,如果出现同名,则检查文件是否具有相同的内容,如果是则打印>文件<。如果文件同名但内容不同 <file> 如果有一个文件不在目录2但在目录1 <<< file1,同样>>> file2对于目录2但不在目录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";}
        }
    }
}
4

1 回答 1

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/*
于 2012-10-23T03:26:52.940 回答