Recurse is probably a Boolean i.e. 0|1

Your put is failing because you're doing ftp->put not $ftp->put


________________________________
From: zilore mumba [mailto:[email protected]]
Sent: Tuesday, December 29, 2009 9:15 AM
To: [email protected]; Jeff Saxton
Subject: RE: help with ftp

Jeff,
Thanks very much for the hint. With mkdir it actually created the directories 
once but had a problem with put.
When I rerun it it fails again at mkdir. (incidentally I do not know what value 
to put in for RECURSE. when I type RECURSE it gives of a breword RECURSE).
Thanks for sparing your time.
Zilore



--- On Tue, 12/29/09, Jeff Saxton <[email protected]> wrote:

From: Jeff Saxton <[email protected]>
Subject: RE: help with ftp
To: "zilore mumba" <[email protected]>, "[email protected]" 
<[email protected]>
Date: Tuesday, December 29, 2009, 4:45 PM
from the pod:

mkdir ( DIR [, RECURSE ])

Create a new directory with the name DIR. If RECURSE is true then mkdir will 
attempt to create all the directories in the given path.





________________________________
From: [email protected] 
[[email protected]] On Behalf Of zilore mumba 
[[email protected]]
Sent: Tuesday, December 29, 2009 6:00 AM
To: [email protected]
Subject: help with ftp
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