use AppConfig qw(:argcount);
use Data::Dumper;
use File::Basename;
use Getopt::Long;
use Net::FTP::Common;
use strict;
my ($overwrite);
GetOptions('overwrite=i' => \$overwrite) or die;
defined ($overwrite) or die "must set overwrite to 1 or 0";
my $lockfile = '/tmp/net-ftp-rsync-upload-files.lck';
my $wanted = 'files-wanted.done';
my $upload_log = 'rsync-upload-files.dat';
sub cleanup {
warn "closing dup handle";
close(Net::FTP::Common::DUP);
unlink $lockfile;
1;
}
sub unwanted {
# also do modtime stuff!
my ($ez, $local_file, $local_dir, $remote_dir) = @_;
# looks funny (RemoteFile => $local_file) but it's right!
warn "if ($ez->exists(RemoteFile => $local_file, RemoteDir => $remote_dir)) {";
if ($ez->exists(RemoteFile => $local_file, RemoteDir => $remote_dir)) {
warn "$local_file already there in $remote_dir... skipping";
return 1
}
return 0;
}
sub remotedir {
my $dir = shift;
$dir =~ s{Users/metaperl}{home/metaperl/backup};
$dir
}
-e $lockfile and die "$lockfile must be removed before running script";
#
# get connection info
#
my $config = AppConfig->new( {CASE => 1} ) ;
my $site = 'urth_';
$config->define("$site$_", { ARGCOUNT => ARGCOUNT_ONE } )
for qw(User Pass Host RemoteDir Type);
$config->file($ENV{NET_FTP_BACKUP});
my %urth = $config->varlist("^$site", 1);
warn Data::Dumper->Dump([\%urth],[qw(urth)]);
#
# setup Net::FTP::Common object
#
our %netftp_cfg = (Debug => 1, Timeout => 120);
my $ez = Net::FTP::Common->new({ %urth, STDERR => $lockfile }, %netftp_cfg);
open W, $wanted or die "couldn't open $wanted: $!";
open U, ">$upload_log" or die "couldn't open $upload_log: $!";
our %mkdir;
while (<W>) {
chomp;
my $lf = $_;
warn $lf;
my ($filename, $ld, undef) = fileparse($lf);
my $rd = remotedir $ld;
next if unwanted($ez, $filename, $ld, $rd);
warn "ld: $ld lf: $lf rd: $rd";
{
last if $mkdir{$rd};
$ez->mkdir(RemoteDir => $rd, Recurse => 1);
$mkdir{$rd}++;
}
warn "ez->send(LocalFile => $filename, LocalDir => $ld)";
$ez->send(LocalFile => $filename, LocalDir => $ld);
print U "$ld\t$filename\n";
}
syntax highlighted by Code2HTML, v. 0.9.1