IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

[Unix] Test archive TAR corrompue ou non


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut [Unix] Test archive TAR corrompue ou non
    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 !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    sur les système unix tu as un variable $? qui stocke le statut (exit status) de la dernière commande executée.

    Tu peux récupérer cette valeur juste après avoir créé ton archive.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [sshuser@mvts2 ns-allinone-2.33]$ mkdir /usr/test
    mkdir: ne peut créer le répertoire `/usr/test': Permission non accordée
    [sshuser@mvts2 ns-allinone-2.33]$ echo $?
    1
    [sshuser@mvts2 ns-allinone-2.33]$ mkdir test
    [sshuser@mvts2 ns-allinone-2.33]$ echo $?
    0
    Dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    `tar -cvf .....`;
    my $status = `echo $?`;
     
    print $status;

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    $? existe aussi en Perl et fonctionne sous tout système, pas seulement sous les dérivés Unix comme `echo $?`.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    `tar blabla`;
    print "Failure\n" if $?;
    NB : Comme tu ne sembles rien faire de la sortie de tar tu pourrais aussi bien utiliser directement system() plutôt que les backticks :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    system("tar blabla")
      and print "Failure !\n";
    --
    Jedaï

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut
    Merci pour ces précieuses réponses !

    Je devais tester pour supprimer ou non le répertoire.
    j'ai donc fait un if sur $? !

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur décompression archive tar
    Par eltunisiano dans le forum Administration système
    Réponses: 3
    Dernier message: 22/05/2006, 00h03
  2. Réponses: 4
    Dernier message: 12/01/2006, 18h53
  3. Problème avec une archive tar
    Par sylsau dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/12/2005, 09h57
  4. Archive tar et exclusion de fichiers
    Par aliasjcdenton dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 18/08/2004, 03h09
  5. [TreeView] Test de la présence ou non d'un noeud
    Par TheDarkLewis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2004, 03h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo