需要比较两个目录,并检查两个目录中的每个文件是否有相同名称的文件,如果出现相同的名称,则检查文件是否具有相同的内容,如果是,则打印>档案<。如果文件具有相同的名称但不具有相同的内容<档案>如果文件不在目录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";}
}
}
}
答案 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/*