# -------------------------------------------------- # 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;