弗雷德又来这里了,我遇到了一个小问题,希望你们能帮助我。
我正在审查期中考试并查看我在这里找到的旧文件,我想让它工作。我在这里找不到它了,但我仍然有源代码,所以我会提出另一个问题。
所以这是他的任务:编写一个 perl 脚本,将比较两个目录的常规文件差异。所有具有相同名称的常规文件都应使用 unix 函数 /usr/bin/diff -q 进行测试,这将确定它们是否相同。dir1 中的文件在 dir2 中没有类似名称的文件,其名称将打印在字符串 <<< 之后,而 dir2 中没有相应 dir1 条目的文件将以字符串 >>> 作为前缀。如果两个文件名称相同但不同,则文件名将被 > < 包围。
这是脚本:
#!/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;
statement:
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 statement;
} else {
print "> $file1 <\n";
}
} else {
if ( !-e "$files1[$i]/$file2") { print ">>> $file2\n";}
unless ( -e "$files2[$x]/$file1") { print "<<< $file1\n";}
}
}
}
这是输出:
> file2 <
>>> file5
<<< file1
输出应该是:
> file1 <
> file2 <
<<< file4
>>> file5
我已经检查了文件以确保它们都匹配,但仍然存在问题。如果有人可以帮助我,我将不胜感激!