フレッド、私が抱えているちょっとした問題でここに戻ってきました。皆さんが私を助けてくれることを願っています。
ここで見つけた古いファイルを調べていて、それを機能させたいと思っていました。ここではもう見つかりませんが、ソースコードがまだ残っているので、別の質問をします。
そこで、彼の課題は次のとおりです。2 つのディレクトリを比較して、通常のファイルの違いを調べる perl スクリプトを作成してください。同じ名前のすべての通常のファイルは、それらが同一であるかどうかを判断する UNIX 関数 /usr/bin/diff -q を使用してテストする必要があります。dir2 に同様の名前のファイルがない dir1 のファイルは、文字列 <<< の後にその名前が出力されますが、対応する dir1 エントリのない dir2 のファイルには、文字列 >>> が前に付けられます。2 つのファイルが同じ名前で異なる場合、ファイル名は > < で囲まれます。
スクリプトは次のとおりです。
#!/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
私はすでにファイルをチェックして、それらがすべて一致していることなどを確認しましたが、まだ問題があります。誰かが私を助けることができれば、私はそれを大いに感謝します!