我只是 perl 的初学者,我需要以下帮助。
DirA 和 DirB 有文件 f1 ,f2 ,f3 ,f4, f5 (不一定是 5 个)。我需要将 DirA 中 f1 的内容与 DirB 中 f1 的内容进行比较,并将结果输出到 f1_diff 中。同样需要对目录 A 和 B 中的所有文件执行此操作。因此在上述情况下,假设所有文件的内容不同,脚本将输出 5 个文件 f1_diff,f2_diff,f3_diff,f4_diff,f5_diff,其中 f1 都缺少行DirA 和 f1 DirB。
例如,如果
f1 dir A has line1, line2, line3, line4xxxx, line5
f1 dir B has line1, line2xxxx, line3, line4, line5
f1_diff 应该有
line2 --> line2xxxx
line4xxxx -->line4
有人可以帮我解决这个问题。
更新: 我现在有以下脚本,需要添加以下内容。文件名:不同行数 文件 1 - 1 文件 2 - 30 文件 3 - 在 dir1 中丢失 文件 3a - 在 dir2 中丢失
其次,行数不同。有人可以帮我修改一下吗
#!/usr/bin/perl
package Main; {
use strict;
use warnings;
use Cwd;
my $DirA;
my $DirB;
my $y;
print ("\nChoose one of the entries below\n");
print ("e1\e2\e3\n\n");
print("Enter here --->");
my $dir = <>;
chomp($dir);
if ($dir eq "e1"){
$DirA = "./dir1";
$DirB = "./dir2";
}
elsif ($dir eq "e2"){
$DirA = "./dir3";
$DirB = "./dir4";
}
else{
$DirA = "./dir5";
$DirB = "./dir6";
}
opendir my($dh), "$DirA" or die "Couldn't open dir DirA!";
my @files = readdir $dh;
closedir $dh;
system("rm -rf diffs");
system ("mkdir diffs");
foreach my $file (@files) {
next if -d $file;
my $diff = `diff -y --suppress-common-lines "$DirA/$file" "$DirB/$file"`;
open DIFF_FILE, ">$file"."_diff";
print DIFF_FILE $diff;
close DIFF_FILE;#}
}
chdir("./diffs/");
my $cwd = cwd();
system("mv ../*_diff .");
foreach(glob('*.*')) {
unlink if (-f $_) && !-s _;
}
print("Total number of differences = "); system("ls *_diff | wc -l");print("\n");
}