# --------------------------------------------------
# mirror - mirrors an internet site using FTP
# --------------------------------------------------
# by Craig Comstock 1998
# --------------------------------------------------
use Net::FTP;
use File::Listing;
# subroutine mirror is a recursive function
# mirror ($depth, $path, $target)
# it parses and downloads files
# $depth = how deep into the directory tree you want to go
# (1 is simply the current directory)
# $path = root path to start from
# $target = local root path to mirror to
sub mirror {
my $depth = shift(@_);
my $path = shift(@_);
my $target = shift(@_);
#status line
print "$depth - $path - $target\n";
if ($depth == 0) {return;}
for (parse_dir($ftp->dir($path))) {
($name, $type, $size, $mtime, $mode) = @$_;
if (($type eq 'd') && ($name ne '$pfebk')) {
mkdir($target."/".$name,777);
mirror($depth-1,$path."/".$name,$target."/".$name);
next;
}
elsif ($type eq 'f')
{
print "getting $path/$name to $target/$name\n";
$ftp->get($path."/".$name,$target."/".$name);
}
}
}
#login to the server we want to go to
$ftp = Net::FTP->new("hostname");
$ftp->login("username","password");
#select which path to start with
$path = '/';
#set type as binary
$ftp->binary();
#execute function
#localpath should start "c:\\" for dos/win
# or "/" for unix...
mirror(1,$path,"localpath");
#logout
$ftp->quit;
#that's it
end;