Rob Dixon wrote:

> Your question is too long.

I will surely follow your direction, though my message was verbose 
because, as i stated in the first line, it was not a technical problem 
but more of a coding-philosphical one.
I think code is little relevant in this case, but i'll post it at the 
bottom of this message. I am in Windows environment, Perl 5.6.
Thank you for suggestion already posted.

usage: zip.pl <source dir> <dest file> parameter;

<PERL CODE>

### DECLARATIONS
################
use strict;
use lib qw(j:/program/perl/lib j:/program/perl/site/lib);
use Archive::Zip;
use Archive::Zip::Tree;
use Getopt::Long;

my $logfile = "zip.pl.log";
my $srcdir;             # source folder
my $bakfile;            # destination zip file
my $giornimin=0;        # include only days older than $giornimin 
my $giornimax=9999;     # include only days newer than $giornimax
my $log=0;                      # log output if true
my $delete=0;           # delete files after archiving if true

sub usage;                      # show usage and exit
sub checkif;            # parameter check for every file



### VERIFY INPUT
################

usage if scalar(@ARGV)<2;

GetOptions ('GIORNIMIN=i'       => \$giornimin,
                'GIORNIMAX=i'   => \$giornimax,
                'LOG'                   => \$log,
                'DELETE'                => \$delete
             );

$srcdir = shift;
$bakfile = shift;
$srcdir =~s#\\#/#g;
$bakfile =~s#\\#/#g;

# controllo errori di inserimento
die "Errore nei parametri: GIORNIMIN e\' maggiore di GIORNIMAX\n" if 
($giornimin > $giornimax);


### DELETE OLDER .BAK AND RENAME OLDER .ZIP TO .BAK
###################################################

unlink ($bakfile.".bak") or do {
                print "\nImpossibile cancellare il file .bak: $!\n (verificare 
le connessioni di rete)";
                print "Vuoi continuare (s/n)?\n";
                chomp (my $ans = <STDIN>);
                die unless ($ans eq "s");
};

rename ($bakfile.".zip",$bakfile.".bak") or do {
                print "\nImpossibile rinominare il file .zip in . bak: $!\n";
                print "Vuoi continuare (s/n)?\n";
                chomp (my $ans = <STDIN>);
                die unless ($ans eq "s");
};


### CREATE AND WRITE THE ARCHIVE
################################

if ($log) {
        open (LOG,">>$logfile") or die "Impossibile creare il file di log 
$logfile: $!";  
        print LOG ("Inizio procedura: ",scalar localtime,"\n");
}

print "\n\nProcedura di archiviazione in corso - - NON INTERROMPERE! Se 
il programma\n";
print "va in errore, comparira' un messaggio.\n\n";

my $zip = Archive::Zip->new();

my $status = $zip->addTreeMatching($srcdir,'','.',\&checkif);
die "Errore nella creazione del file .zip: $status\n" if $status != 
"AZ_OK";

$status = $zip->writeToFileNamed($bakfile.".zip");
die "Errore nella scrittura del file .zip: $status\n" if $status != 
"AZ_OK";

if ($log) {
        print LOG ("Fine procedura: ",scalar localtime,"\n");
}


### CHECKIF
###########
sub checkif {
        return 0 unless ((-M) >= $giornimin);           
        return 0 unless ((-M) <= $giornimax);
        return 1;
}

### USAGE
#########
sub usage {
print << 'USAGE'

Sintassi: 
   perl j:/program/perl/scripts/zip.pl [cartella da zippare] [percorso e 
nome del file zip] [parametri]

Esempio: 
   perl j:/program/perl/scripts/zip.pl c:/documenti/ 
u:/utenti/abeni/backup

Parametri:
   --GIORNIMIN=<n>: include solo i file modificati da almeno <n> giorni
                    (default 0)
   --GIORNIMAX=<n>: include solo i file modificati da non piu' di <n> 
giorni
                    (default 9999)
   --LOG:           scrive su un log informazioni dettagliate 
sull'operazione

NOTA: l'estensione ".zip" verra' aggiunta in ogni caso al nome del file 
zip, 
percio' non scrivere "backup.zip" altrimenti diventera' "backup.zip.zip".
USAGE
;
exit;
}

</PERL CODE>

-- 
Zanardi2k3

"Why do i need you, feet, when i have wings to fly?"
(Frida Kahlo)

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to