j'utilise le script ci-dessous pour effectuer des sauvegardes de certains
répertoires toutes les heures. a priori il le fait très bien. mon seul
souci réside dans le fichier de log ( $FLOG ). je retrouve bien mes logs
dans le fichier mais à chaque execution le fichier log est réinitalisé
alors que au contraire j'aimerais pourvoir garder un historique des logs.
quelqu'un sait il ce que je dois modifier dans mon perl pour corriger cela ?
par avance merci.
----------script-------------
#!/usr/bin/perl
# -- include des modules necessaires
use File::Find; # -- module contenant la fonction de parcours recursif d'une
arborescence
use File::Path; # -- module contenant les fonctions portables de creation et
suppression de repertoire
use File::Copy; # -- module contenant les fonctions de copie et de
deplacement de fichiers
#-------------------------------------------#
# CORPS DU PROGRAMME #
#-------------------------------------------#
# -- sauvegarde des handles d'origine STDOUT et STDERR
open SAUV_STDOUT, ">&STDOUT";
open SAUV_STDERR, ">&STDERR";
# -- recuperer les parametres transmis
my $SOURCE = $ARGV[0];
my $DESTINATION = $ARGV[1];
my $EXCLUDE = $ARGV[2];
my $FLOG = '/home/sebastien/tmp/copie_fichier.log';
# -- variables locales pour le traitement des erreur(s)
my $ERR = 0; # -- nbre d'erreurs survenues
my $RC = 0; # -- code retour
if ( -e $SOURCE ) {
if ( $DESTINATION eq $SOURCE ) {
print "\n\nERREUR SUR COPIE DE $SOURCE VERS $DESTINATION : \n\n\tLe
dossier de destination est un sous-dossier du dossier source !\n\n";
$RC =1;
} else {
# -- traitement principal
&trace_log;
&main;
}
} elsif (not -e $SOURCE) {
print "\n\nERREUR SUR COPIE DE $SOURCE VERS $DESTINATION : \n\n\tDossier
source inexistant !\n\n";
$RC =1;
}
# -- restitution des handles d'origine
open STDOUT, ">&SAUV_STDOUT";
open STDERR, ">&SAUV_STDERR";
exit $RC;
# -- copie incrementale des fichiers
if ($_ eq ".") {
$racine = "$File::Find::dir";
$decalage = length $racine;
# -- pas de prise en compte du dernier / ou \ pour $File::Find::dir
++$decalage;
} elsif (-d $_) {
$rep = substr $File::Find::dir, $decalage;
$dir = "$DESTINATION/$rep/$_";
if ( not -e $dir) {
eval { mkpath ("$dir") || die " ERREUR : Impossible de creer le
repertoire $dir : $!\n"; };
if ($@) {
print "$@";
++$ERR;
} else {
print"Creation repertoire $dir\tOK\n";
}
}
} else {
$rep = substr $File::Find::dir, $decalage;
$fic = "$DESTINATION/$rep/$_";
foreach $motif (@{$refliste}) {
next if (not $_ =~ m/$motif/i);
$copie = 0;
}
if ( ($copie == 1) && ( (not -e $fic) || (-M $File::Find::name < -M $fic)
) ) {
eval { copy ("$File::Find::name", "$fic") || die " ERREUR : Impossible
de copier le fichier $File::Find::name vers $fic : $!\n";};
if ($@) {
print "$@";
++$ERR;
} else {
print "Copie fichier $File::Find::name vers $fic\tOK\n";
}
}
}
}
sub purge_fichier {
my $rep = substr $File::Find::dir, $decalage; # -- recuperation
my $dir; # -- repertoire de reference
my $fic;
# -- copie incrementale des fichiers
if ($_ eq ".") {
$racine = "$File::Find::dir";
$decalage = length $racine;
# -- pas de prise en compte du dernier / ou \ pour $File::Find::dir
++$decalage;
} elsif (-d $_) {
$dir = "$SOURCE/$rep/$_";
if ( not -e $dir) {
# -- pas d'analyse en profondeur, suppression du repertoire
$File::Find::prune = 1;
eval { rmtree ("$File::Find::name") || die " ERREUR : Impossible de
detruire le rep $File::Find::name : $!\n"; };
if ($@) {
print "$@";
++$ERR;
} else {
print"Suppression repertoire : $File::Find::name\tOK\n";
}
}
} else {
$fic = "$SOURCE/$rep/$_";
if (not -e $fic) {
eval { unlink ("$File::Find::name") || die " ERREUR : Impossible de
supprimer le fichier $File::Find::name : $!\n";};
if ($@) {
print "$@";
++$ERR;
} else {
print "Suppression fichier : $File::Find::name\tOK\n";
}
}
}
}
sub ouverture_log {
local($nom)=@_;
local($rc)=0;
# -- redirection de la sortie
if (open(STDOUT,">$nom")) {
# -- redirection de l'erreur standard vers la sortie standard
open(STDERR,">&STDOUT");
# -- pour ecriture directe sans passer par le tampon
select(STDERR);
$| = 1;
select(STDOUT);
$| = 1;
$rc=0;
}
else {
$rc=1;
}
return($rc);
}
sub affichage_utilisateur {
# -- restitution des handles d'origine pour affichage
# -- dans la fenêtre MSDOS
open STDOUT, ">&SAUVEGARDE_0MN_STDOUT";
open STDERR, ">&SAUVEGARDE_0MN_STDERR";
}
sub trace_log {
# -- ouverture du fichier log applicatif du job
&ouverture_log($FLOG);
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jl_morel
Dans l'article <bfbrpr$ude$, sebastien. a dit...
j'utilise le script ci-dessous pour effectuer des sauvegardes de certains répertoires toutes les heures. a priori il le fait très bien. mon seul souci réside dans le fichier de log ( $FLOG ). je retrouve bien mes logs dans le fichier mais à chaque execution le fichier log est réinitalisé alors que au contraire j'aimerais pourvoir garder un historique des logs.
quelqu'un sait il ce que je dois modifier dans mon perl pour corriger cela ?
Dans l'article <bfbrpr$ude$1@news-reader2.wanadoo.fr>, sebastien.
drouard@wanadoo.fr a dit...
j'utilise le script ci-dessous pour effectuer des sauvegardes de certains
répertoires toutes les heures. a priori il le fait très bien. mon seul
souci réside dans le fichier de log ( $FLOG ). je retrouve bien mes logs
dans le fichier mais à chaque execution le fichier log est réinitalisé
alors que au contraire j'aimerais pourvoir garder un historique des logs.
quelqu'un sait il ce que je dois modifier dans mon perl pour corriger cela ?
j'utilise le script ci-dessous pour effectuer des sauvegardes de certains répertoires toutes les heures. a priori il le fait très bien. mon seul souci réside dans le fichier de log ( $FLOG ). je retrouve bien mes logs dans le fichier mais à chaque execution le fichier log est réinitalisé alors que au contraire j'aimerais pourvoir garder un historique des logs.
quelqu'un sait il ce que je dois modifier dans mon perl pour corriger cela ?