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

Reply via email to