www.pudn.com > filecollector.rar > ftp.pl


#!/usr/local/perl5/bin/perl

use Getopt::Long;
use Net::FTP;

my $usage = "\nUsage:$0 \n\t-h  \n\t-u  \n\t-p  \n\t-f \n\t-r  \n\t-o  -get[-put]\n\n";
my ($host,$user,$pass,$rdir,$dest,$file,$p_flag,$g_flag);
GetOptions("h:s"=>\$host,"u:s"=>\$user,"p:s"=>\$pass,"r:s"=>\$rdir,"o:s"=>\$dest,"f:s"=>\$file,"get"=>\$g_flag,"put"=>\$p_flag);

die "$usage" if (!($host && $user && $pass && $rdir && $file));


my $source_file = $rdir."/".$file;
my $dest_file;
if (! $dest)
{
	$dest_file = $file;
}
else
{
	$dest_file = $dest."/".$file;
}

	
print "\nFtp host:$host\n";
my $ftp = Net::FTP->new($host,Timeout=>60,Debug=>0) || die "Can't connect: $@\n";
print "\nLogin:$user\nPassword:$pass\n";
$ftp->login($user,$pass) || die "Couldn't authenticate, even with explicit username and password.\n";

if( $g_flag) {
    my @a_source_file = $ftp->ls($source_file);
    my ($v_source_file , $v_dest_file );
    foreach $v_source_file ( @a_source_file ){
        print "test: $v_source_file \n";
        $v_source_file =~ m/\/*([\w\.]+)\s*$/ ;
        $v_dest_file = $dest."/".$1;
        print "\nGet File:$v_source_file from $host to $v_dest_file\n";
        $ftp->get($v_source_file, $v_dest_file) || die "Can't get $v_source_file : $!\n";
    }
}  

if ($p_flag){
        print "\nPut File:$source_file to host $host@$source_file \n";
        $ftp->put($dest_file, $source_file) || die "Can't put $file : $!\n";
}

$ftp->quit();
exit 0;