Oh God! My eyes....
How (Not) To Ask A Question
#!/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;
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.