2

2つのディレクトリを比較し、両方のディレクトリ内のすべてのファイルで同じ名前のファイルを確認する必要があります。同じ名前が発生した場合は、ファイルの内容が同じかどうかを確認します。同じ内容の場合は、>file<を出力します。ファイルの名前が同じで内容が同じでない場合<file>ディレクトリ2ではなくディレクトリ1にあるファイルがある場合<<<file1、および同様に、ディレクトリ2にあるがdir1にはないファイルの場合は>>>file2 。問題が発生しました。ファイルの名前が同じかどうかをテストしても、コードが比較されません。

#!/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 に答える