This very simple script is used to backup a remote directory of tarred and zipped files. I'd be curous about better ways to do this. In particular, I'm interested in a better way to test if a remote file is a directory or a file or a better way to determine if a file has already been copied
#~/usr/local/bin/perl -w use strict; use Net::FTP; my $host='myhost.org'; my $uname='backup'; my $pword='really_secure'; my $rdir='/backup'; my $ldir='D:/archives/brave-backup'; ######################################### # # # no user server servicable parts below # # # ######################################### my $ftp = Net::FTP->new($host, Debug => 0, Passive =>1, Hash=>1) or die("$@ couldn't construct ftp object"); print "logging on to $host\n"; $ftp->login($uname,$pword) or die("couldn't login to $host, as $uname\n"); $ftp->cwd($rdir) or die("couldn't cd to remote dir: $rdir\n"); my @r_files=$ftp->ls() or die("couldn't cd to list dir: $rdir\n"); chdir($ldir) or die("couldn't open to local dir: $ldir\n"); opendir(DH,'.') or die("couldn't cd to local dir: $ldir\n"); my @l_files=readdir(DH) or die ("couldn't list local dir: $ldir\n"); closedir(DH) or die("couldn't close local dir: $ldir"); my %backed_up_files; foreach (@l_files){ $backed_up_files{$_}=1; } $ftp->binary() or die("couldn't set mode to BINARY\n"); foreach(@r_files){ if (!$backed_up_files{$_} && !Is_Dir($_)){ print "\tgetting $_\n"; $ftp->get($_) or die("couldn't get remote file: $_"); } } $ftp->quit; sub Is_Dir($){ my $maybe_dir=shift; my $result=$ftp->cwd($maybe_dir); $ftp->cwd($rdir); #return to our original dir return $result; }