#!/usr/bin/perl use Net::FTP;
use Archive::Extract;
use File::Listing qw(parse_dir);
$host = ''; $path = '';
$ftp = Net::FTP->new($host, Timeout => 1800) or die "Cannot contact $h
+ost: $!";
$ftp->login('username', 'password') or die "Cannot login ($host):" . $
+ftp->message;
$ftp->cwd($path) or die "Cannot change directory ($host):" . $ftp->mes
+sage;
@Files = $ftp->ls('-lR');
#$ftp->binary();
$ftp->ascii();
foreach $file (parse_dir(\@Files)) {
my($name, $type, $size, $mtime, $mode) = @$file;
print "Retrieving $name \n";
print "File type $type \n";
if ($type != 'f') {
print "File name: $name";
print "File type: $type";
}
if ($type eq 'f') {
$ftp->hash($name,102400);
$ftp->mput($name, '/data/UC4/outbound/CustomerStatement/*.txt') or
+ warn "Could not get $name, skipped: $!";
EXTRACT("$name '/data/UC4/outbound/CustomerStatement/*.txt');
}
}
$ftp->quit or die "Could not close the connection cleanly: $!";
sub EXTRACT {
my $ae = Archive::Extract->new( archive => @_ );
my $ok = $ae->extract( to => 'LOCATION' );
}
exit;
The first thing that is immediately obvious on actually being able to read the post is that you're missing a double-quote on line 24. Is this the exact script that you're running?
Updated
After looking at your script some more, I think you're wanting to do something more like this.
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;
my $srcHost = '';
my $dstHost = '';
my $path = '';
my @getFiles = ();
my @putFiles = ();
#connect to your source machine first
my $ftp = Net::FTP->new($srcHost, Timeout => 1800) or die "Cannot cont
+act $srcHost: $!";
$ftp->login('username', 'password') or die "Cannot login ($srcHost):"
+. $ftp->message;
$ftp->cwd($path) or die "Cannot change directory ($srcHost):" . $ftp->
+message;
#then get the list of all files
@getFiles = $ftp->ls('-lR');
foreach my $file (@getFiles){
#do whatever it is you're doing to decide if you want the file or no
+t
if(&SOME_FILE_TEST($file)){
#get the file and save the name
if($ftp->get($file)){
push(@putFiles, $file);
}else{
warn $ftp->message;
}
}
}
unless($ftp->quit){
undef $ftp;
warn "Could not close the connection cleanly: $!";
}
#now you need to connect to the destination server
$ftp = Net::FTP->new($dstHost, Timeout => 1800) or die "Cannot contact
+ $dstHost: $!";
$ftp->login('username', 'password') or die "Cannot login ($dstHost):"
+. $ftp->message;
$ftp->cwd($path) or die "Cannot change directory ($dstHost):" . $ftp->
+message;
foreach my $file (@putFiles){
unless($ftp->put($file)){
warn "Failed to put $file: " . $ftp->message;
}
}
$ftp->quit or die "Could not close the connection cleanly: $!";
sub SOME_FILE_TEST{
#do whatever you want here
return 1;
}
|