Questo script fa un backup di un sito o di una sua directory e lo salva in formato zip.
Codice:
#!/usr/bin/perl
# backup ftp directory by girex
use File::Path;
use Net::FTP;
use Archive::Zip qw( :ERROR_CODES );
my $host = shift or die "\nusage: perl $0 <host>\n";
my $zip = new Archive::Zip;
my $client = new Net::FTP( $host ) or die "\nCannot connect to $host: $!\n";
print "\nConnessione stabilita..\n\nuser: ";
chomp(my $user = <>);
print "pass: ";
chomp(my $pass = <>);
$client->login( $user, $pass ) or die "\nCannot login. ", $client->message;
print "\n", join ( "\n", $client->ls() ), "\n\n";
print "Directory di cui fare il back-up: ";
chomp(my $root_dir = <>); print "\n";
$client->cwd( $root_dir ) or die "Impossibile spostarsi in $root_dir. $!\n";
mkdir( "backup" );
chdir( "backup" );
get_dir( $root_dir );
chdir ( ".." );
$zip->addTree ( "./backup", "./backup" ) == AZ_OK or die $!;
$zip->writeToFileNamed( "backup.zip" ) == AZ_OK or die $!;
$client->quit();
rmtree( "backup" ) or die $!;
print "\n\nBackup completato con successo, vedi backup.zip!\n";
sub get_dir()
{
my $dir = shift;
foreach $f( $client->ls() )
{
next if $f =~ /^\.{1,2}$/;
my $c = $client->pwd ();
$c =~ s/\/$//;
print "Downloading: " . $c . "/$f\t\t\t\r"; $| = 1;
if($client->cwd ( $f ))
{
mkdir ( $f );
chdir ( $f );
get_dir( $client->pwd() );
chdir ( ".." );
$client->cdup ();
}
else
{
$client->get( $f, $f );
}
}
}