私は perl の初心者で、次の点で助けが必要です。
DirA と DirB には、ファイル f1 、f2 、f3 、f4、f5 があります (必ずしも 5 つではありません)。DirA の f1 の内容と DirB の f1 の内容を比較し、結果を f1_diff に出力する必要があります。同様に、ディレクトリ A と B のすべてのファイルに対してこれを行う必要があります。したがって、上記の場合、すべてのファイルの内容が異なると仮定すると、スクリプトは f1_diff、f2_diff、f3_diff、f4_diff、f5_diff の両方の f1 の行が欠落している 5 つのファイルを出力します。 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");
}