#!/usr/bin/perl -w use strict; use Net::FTP; my ($server, $remoteDIR, $localDIR, $userID, $password, $connTimeout, $maxRetryCount, $passiveMode, $debug, $justKidding, $autoDebug, $ftp, $l_size,$l_size2, $l_remote_size, $diff, ); $server = "ftp.pbtech.org" ; $remoteDIR = "/clients/santarosa_cc" ; $localDIR = "/var/www/html/clients/santarosa_cc" ; $userID = 'info' ; $password = 'sl!1820' ; $connTimeout = 120 ; $maxRetryCount = 2 ; $passiveMode = 'true'; $debug = 0 ;#'false' $autoDebug = 'false' ; $justKidding = 0; #print "netrodownload Starting: host=($server), localDIR=($localDIR), remoteDIR=($remoteDIR)\n"; $ftp = new Net::FTP ($server, Debug => $debug, Passive => $passiveMode, Timeout => $connTimeout, ) or die "Cannot connect ", $ftp->message; $ftp->login($userID,$password) or die "Cannot login ", $ftp->message; $ftp->cwd($remoteDIR); $ftp->binary; my @lsread = $ftp->ls(); my @dirread = $ftp->dir(); #for my $i (0..@lsread-1) { # print "49 $i $lsread[$i]\n"; #} my %dirout = (); for my $i (0..@dirread-1) { #print "$i $dirread[$i]\n"; next if $dirread[$i] =~ /^d/; if ($i > 0) { my @as = split(/\s+/,$dirread[$i]); #for my $k (0..@as-1) { # print "59 $k $as[$k]\n"; # exit if $i > 3; #} $dirout{$as[8]}{'month'} = $as[5] ; $dirout{$as[8]}{'day'} = $as[6] ; $dirout{$as[8]}{'year'} = $as[7] ; $dirout{$as[8]}{'size'} = $as[4] ; $dirout{$as[8]}{'fname'} = $as[8] ; #print "$as[8]\t$as[4]\n"; } } my $lcmax = $ARGV[0] - 0; my $lc = 0; print "updating $lcmax files\n"; foreach my $l_key (keys(%dirout)) { my $r_fname = $dirout{$l_key}{'fname'} ; #print "$r_fname\n"; #if ($r_fname =~ /wmv|xls|htm|pdf|doc/) { if (-e $r_fname) { #print "FOUND $r_fname \n"; $l_size = -s $r_fname ; $l_remote_size = $dirout{$r_fname}{'size'}-0 ; $diff = $l_size - $l_remote_size ; next if abs($diff) <= 1024 || $l_size == 0; sleep 1; $l_size2 = -s $r_fname ; $l_size2 -= 0 ; next if $l_size2 != $l_size; print "$r_fname $l_size $l_remote_size |$diff| \n" if $l_size > 0 && abs($diff) > 1024; $lc++; &getfile($r_fname,$l_size); } else { print "NOT FOUND $r_fname \n"; $l_size = 0; &getfile($r_fname,$l_size); $lc++; } #} exit if $lc >= $lcmax; } exit; sub getfile { my ($l_name, $l_size) = @_; my $maxRetry = $maxRetryCount; my $success = 0; # try up-to Max retry times while (($maxRetry >= 0) && !$success) { $success = 1; ##$ftp->get("that.file", "this.file", $bytes_already_downloaded); if ($ftp->get($l_name,$l_name, $l_size)) { $success = 1; print "$l_name copied \n"; } else { $success = 0 ; print "$l_name transfer failed\n"; } if (($maxRetry > 0) && !$success) { print "129| Connection Lost! Reconnecting ...\n" ; $ftp->close (); $debug = 2 if ($autoDebug); # attempt to re-connect to the remote host $ftp = new Net::FTP ($server, Debug => $debug, Passive => $passiveMode, Timeout => $connTimeout, ); $ftp->login($userID,$password) or die "Cannot login ", $ftp->message; $ftp->binary; # set the success flag $success = 0 if (!defined ($ftp)); } # decrement the retry counter $maxRetry--; } }