#!/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 = <NEW>; @tblold = <OLD>; $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); }