#!/usr/bin/perl
#
ディレクトリ構成リスト比較(チェック用)
#パラメータ1:新ディレクトリリスト
#パラメータ2:旧ディレクトリリスト
#パラメータ3:比較リスト出力
$listnew = $ARGV[0];
$listold = $ARGV[1];
$ofile = $ARGV[2];
$pasnew = "";
$pasold = "";
$highvalue ="\xFF";
open(NEW,$listnew)|| print("open faild newfile:$listnew\n");
open(OLD,$listold)|| print("open faild oldfile:$listold\n");
open(OUF,">".$ofile)|| print("open faild :$ofile");
@tblnew = ;
@tblold = ;
$headlennew=$headlenold=0;
$numnew = @tblnew;
$numold = @tblold;
$cntnew = -1;
$cntold = -1;
&readnew;
&readold;
$headlennew = split(/\//,$pasnew) -1;
$headlenold = split(/\//,$pasold) -1;
$headoldpas = $diffold;
&readnew;
&readold;
until ( $diffold eq $highvalue and $diffnew eq $highvalue)
{
if ($diffnew eq $diffold)
{
if ($kndnew ne "D")
{
if ( $mtimen gt $mtimeo )
{
&updfile;
}
else
{
}
}
&readnew;
&readold;
}
elsif ($diffnew lt $diffold)
{
if ($kndnew eq "D")
{
&insdir;
}
else
{
&insfile;
}
&readnew;
}
else
{
if ($kndold eq "D")
{
&deldir;
}
else
{
&delfile;
}
&readold;
}
}
sub readnew
{
$cntnew++;
if ( $cntnew >= $numnew )
{
$diffnew = $highvalue;
}
else
{
$linenew = @tblnew[$cntnew];
($kndnew,$pasnew,$mtimen,$sizen)=split(/::/,$linenew);
@filenew = split(/\//,$pasnew);
$filesiz = @filenew;
$headnew="";
$diffnew="";
for ( $i=1 ; $i <= $filesiz-1 ; $i++)
{
if ($i <= $headlennew)
{
$headnew = $headnew."/".@filenew[$i];
}
else
{
$diffnew = $diffnew."/".@filenew[$i];
}
}
@fileksplit = split(/\./,$diffnew);
$filekind = pop(@fileksplit);
# print ("$headnew - $diffnew - $filekind\n");
}
# print "new $cntnew $pasnew :\n";
}
sub readold
{
$cntold++;
if ( $cntold >= $numold )
{
$diffold = $highvalue;
}
else
{
$lineold = @tblold[$cntold];
($kndold,$pasold,$mtimeo,$sizeo)=split(/::/,$lineold);
@fileold = split(/\//,$pasold);
$filesiz = @fileold;
$headold="";
$diffold="";
for ( $i=1 ; $i <= $filesiz-1 ; $i++)
{
if ($i <= $headlenold)
{
$headold = $headold."/".@fileold[$i];
}
else
{
$diffold = $diffold."/".@fileold[$i];
}
}
# print ("$headold - $diffold \n");
}
# print "old $cntold $pasold :\n";
}
sub insfile
{
printf OUF ("ADD_F %-30s\n",$pasnew);
}
sub updfile
{
printf OUF ("UPD_F %-30s\n",$pasnew);
}
sub insdir
{
printf OUF ("ADD_D %-30s\n",$pasnew);
}
sub delfile
{
printf OUF ("DEL_F %-30s\n",$pasold);
}
sub deldir
{
printf OUF ("DEL_F %-30s\n",$pasold);
}