Bonjour à tous.

Dans le cadre d'un script de rotation de log sous Unix, j'ai besoin de faire la manipulation suivante :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#!/usr/bin/perl -w
#use strict;
 
my @file= `find /export/home/lambda/archive/* -type d -prune`;
 
my @tab_date = localtime(time);
my $Jour  = $tab_date[3]; 
my $Mois  = $tab_date[4]+1; 
my $Annee = $tab_date[5] + 1900;
 
#Pour chaque dossier présent dans le dossier des archives
 
foreach my $dir (@file) 
{
	chomp $dir; # enlève l'espace à la fin de la chaîne
	my $temp=`tar cfv $dir-$Jour-$Mois-$Annee.tar $dir`; # Conception de l'archive
 
        #si temp =0 -> rm -r $dir
	print "$temp\n";
}
En fait, les données qui ont été modifiée il y a plus d'un mois sont déplacée dans un dossier archive (cette opération est faite par un autre script).

Le script ci-dessus effectue alors un compressage des données une fois par semaine (grâce à un cron). Une fois les données compressée, j'aimerai supprimé les données qui viennent d'être compressée mais que ce passe t-il si il y a une archive conrompue? En d'autre termes, si je supprime des données qui n'ont pas été archivée, cela n'est pas correct.

Dans le man de TAR il est indiqué ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 
EXIT STATUS
     The following exit values are returned:
 
     0     Successful completion.
 
     >0    An error occurred.
Mais je n'ai rien dans ma variable $temp après l'exécution de la commande...

Comment pourrais-je tester que mon archive n'est pas corrompue et que dès lors, je peux supprimer les données qui viennent d'être archivée?

Merci d'avance !