Hello Perl Community.
Thanks so much for all the help provided lduring the current year.
Happy and prosperous New Year 2010 to all.
Below is my code where I have a problem with ftp. I am trying to transfer data
from one PC to another. When I try to make a directory on the distant machine,
I get the error: "Can't locate object method 'mkpath' via package 'ftp".
When I comment this part out, the same error appears later on with "ftp->put".
Both parts with problem are highlighted in yellow.
I am not able to find help in Perldoc.
Any help will be appreciated
Zilore
#!/usr/bin/perl -w
#This transfers files from a PC running LINUX to Windows PC.
#
use Net::FTP;
use strict;
use warnings;
use POSIX;
use File::Path;
use File::Copy;
my $debug = 1;
# set variables
#
my $User = 'pc-mis';
my $Pass = 'acmad11';
my $Host = '192.168.2.115';
my @models = ('arpege', 'ukmo', 'ecmf');
my @now = localtime;
my $dat = strftime "%Y%m%d", @now;
my $mon_ab = strftime "%b",@now;
my $mon_num = strftime "%m",@now;
my $mon_name = strftime "%B",@now;
my $yr=strftime "%y",@now;
my $dash="-";
my $mod = "models";
my ($day, $month, $year) = (localtime(time() - 60 * 60 * 24)) [ 3, 4, 5 ];
$year = $year+1900;
$month = $month+1;
my $dat0 = sprintf("%04d%02d%02d", $year, $month, $day );
my $archive_dir = "../ARCHIVE/$mon_num$dash$mon_name$yr"; # where data is
my $remote_basedir = '/';
my $data_dir = "ARCHIVE/$mon_num$dash$mon_name$yr/$mon_ab$yr$dash$mod"; #where
to put it
my @localdir =("../ARCHIVE/$mon_num$dash$mon_name$yr/$models[0]/$dat0",
"../ARCHIVE/$mon_num$dash$mon_name$yr/$models[1]/$dat0",
"../ARCHIVE/$mon_num$dash$mon_name$yr/$models[2]/$dat0");
#my @remotedir = ('$data_dir/$models[0]/$dat0','$data_dir/$models[1]/$dat0',
# '$data_dir/$models[2]/$dat0');
# connect to the remote host
print "Connecting to $Host ...\n";
my $ftp = Net::FTP->new($Host, Timeout => 360, Passive => 'true') or fail ();
$ftp->login($User,$Pass) or die " login '$ftp' failed: $_ ($^E)";
$ftp->binary;
foreach my $ddir (@remotedir) {
if (! -d $ddir) {
print "mkpath $ddir\n" if $debug;
$ftp->mkpath ($ddir) or die "mkpath '$ddir' failed: $! ($^E)";
}
}
$ftp->cwd($data_dir);
# transfer data
print "Transfering data\n";
#my %numbers = ('$localdirs[0]' => '0','localdirs[1]' => '1','localdirs[2]' =>
'2');
my %remotedirs = ();
my $remotedirs;
foreach my $model (@models) {
# define local and remote directories before copying files
if ($model eq 'arpege') {
my $remotedirs = "$data_dir/$models[0]/$dat0";
$remotedirs{$remotedirs} = $localdir[0];
} elsif ($model eq 'ukmo') {
my $remotedirs = "$data_dir/$models[1]/$dat0";
$remotedirs{$remotedirs} = $localdir[1];
} elsif ($model eq 'ecmf') {
my $remotedirs = "$data_dir/$models[2]/$dat0";
$remotedirs{$remotedirs} = $localdir[2];
}
# Transfer files
foreach my $rdir (keys %remotedirs) {
$ftp->cwd($remotedirs($rdir));
my $ldir = $remotedirs{$rdir}
print "Transfering files from $ldir to $remotedirs(rdir)\n" if $debug;
opendir DIR, "$ldir" or die "opendir '$ldir: $! ($^E)";
while (my $file = readdir DIR) {
print "DIR";
exit;
next if $file =~ /\*(b|x|l)$/;
print "Putting $file\n" if $debug;
ftp->put($file) or warn "Failed '$file': $! ($^E)";
}
closedir DIR;
}
}
$ftp->close;
print "Transfering ends\n";
exit 0;
#============================================================================
# Subroutines
#============================================================================
sub fail {
$ftp->quit;
die "ftp error occurred\n";
}
__END__
my $files = $ftp->dir() or die "Error doing ftp->dir: $!\n";
my $files = dir() or die "Error doing dir: $!\n";
foreach (@$files) {
# skip lines not starting with d or -
if (/^[^d-]/) {
print "Skipping garbage dir line\n" if $debug;
next;
}
# ftp dir listing
#----0----- -1- ---2---- ---3---- ---4---- -5- -6 --7-- -----8--------
#total 52
#drwx--x--- 3 owner group 1024 Dec 13 1997 .
#drwxr-xr-x 671 owner group 49152 Dec 18 14:09 ..
#-rw-r--r-- 1 xyz httpd 2010 Sep 21 13:31 index.htm
my ($size, $file) = (split /\s+/, $_, 9)[4,8]; # get size/filename
next if $file =~ /^\.{1,2}$/; # skip . and ..
# if directory - call directory recurse routine
if (/^d/) {
...
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs