#!/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 \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 ); } } }