#!/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 ) { &insfile; } 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 { if ($filekind eq "html" or $filekind eq "css") { printf OUF ("nkf -j %-30s > %-30s\n",$pasnew,$headoldpas.$diffnew); } elsif ($filekind eq "jpg" or $filekind eq "gif" or $filekind eq "png" ) { printf OUF ("cp %-30s %-30s\n",$pasnew,$headoldpas.$diffnew); } else { } } sub insdir { printf OUF ("mkdir %-30s\n",$headoldpas.$diffnew); } sub delfile { printf OUF ("rm %-30s\n",$pasold); } sub deldir { printf OUF ("rm -r %-30s\n",$pasold); }