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

Langage Perl Discussion :

Suppression de fichier via Perl


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut Suppression de fichier via Perl
    Bonjour a toute la communauté.

    Je me suis lancé dans l'écriture d'un script permettant de backuper des fichiers de configurations. Mon script fonctionne bien pour cette tache. Mon problème est le suivant:

    J'aimerais conserver un historique des backups pendant un temps limité.
    Pour mes tests, je fais un backup toutes les minutes et j'ai demandé un historique de 24 Heures max.

    Voila la commande que je lance pour trouver les fichiers :
    find <path> -ctime +0 | wc -l
    Cette commande me renvoie bien le nombre de fichier +anciens de 24H.
    Maintenant, je veux les supprimer.
    J'utilise la commande find <path> -ctime +0 | /usr/bin/xargs /bin/rm -f

    Ces deux commandes marche bien si je les execute directement.

    Via mon script en revanche, j'ai un problème.

    Dans le script ces commandes sont renseigné ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $NB_FICHIERS = `find /XXX/YYY/ZZZ -ctime +0 | wc -l`;
    $NB_FICHIERS =~ s/^\s+//;
    chomp($NB_FICHIERS);
     
    my $CLEAR_FICHIERS = "find /XXX/YYY/ZZZ -ctime +0 | /usr/bin/xargs /bin/rm -f";
     
    my $FILES_DELETE = system $CLEAR_FICHIERS;
    Si j'ajoute dans le script:
    print "NB_FICHIERS"; pour savoir combien de fichiers vont être supprimer le retour me donne 0 alors qu'il y a bien un fichier qui a été supprimé.


    J'ai pensé utiliser la fonction unlink qui apparemment donne comme code de retour le nombre de fichiers supprimer mais je n'arrive pas m'en servir.


    Je débute aussi bien en Perl qu'en programmation ^^

    Si kk'un a une idée du pkoi du comment je suis preneur.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut
    Je viens de refaire le test avec la fonction unlink

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @CLEAR_FICHIERS = `find /var/XXX/YYY/backup -ctime +0`;
     
    foreach (@CLEAR_FICHIERS) {
    &logger (unlink $_);
    }
    La routine &logger me permet de générer un log

    Resultat :
    Mes fichiers ne sont pas supprimer et le code de retour est 0 mais repeter X fois car X fichier trouver.

    Comment faire pour que ca supprime bien mes fichiers trouver et indique le nombre total de fichier supprimer ?

    Suis je seulement sur la bonne voie, je me le demande

  3. #3
    Invité
    Invité(e)
    Par défaut
    Si ta question est "Comment me servir de unlink ?", je pourrai répondre:

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut
    Effectivement pour un fichier pas de probleme.

    Ce que je cherche a faire et de supprimer plusieurs fichiers qui réponde a un critère d'ancienneté de création (find XXX/XXX/XXX -ctime +0)

    C'est vrai que c'etait pas forcemenrt kler.

  5. #5
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Si ma mémoire est bonne, unlink supporte de recevoir une liste de fichiers à supprimer. Ainsi, il est possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my @CLEAR_FICHIERS = `find /var/XXX/YYY/backup -ctime +0 -type f -print`;
     
    logger (unlink @CLEAR_FICHIERS);

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut
    Je viens d'essayer avec ta syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my @CLEAR_FICHIERS = `find /var/XXX/YYY/backup -ctime +0 -type f -print`;
    
    &logger (unlink @CLEAR_FICHIERS);

    Le code de retour est toujours 0 (fichier non supprimé)


    Si j'ajoute
    &logger (@CLEAR_FICHIERS)

    la ligne dans mon log ne contient que le premier des fichier les plus anciens. C'est normal ?

  7. #7
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    C'est normal ...

    La liste retournée par le find contient des "\n" à la fin de chaque ligne, alors que les noms de fichiers ne contiennent pas ce caractère. Il faut donc le supprimer en "chompifiant" la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @CLEAR_FICHIERS =`find /var/XXX/YYY/backup -ctime +0 -type f -print`;
     
    chomp (@CLEAR_FICHIERS);
     
    logger (unlink (@CLEAR_FICHIERS));
    Par ailleurs, il me semble que le & que tu as obligeamment rajouté en rouge est superflu dans la plupart des cas pour les appels de fonctions

    Pour conclure, je t'invite à utiliser, de manière systématique, les balises [code] et [/code] pour mettre ton code en évidence. Cela facilite la lecture du message et augmente la probabilité d'obtention d'une réponse.

  8. #8
    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
    J'ai l'impression que tu as des petits problèmes avec tes commandes shell, pourquoi ne pas tout faire en Perl ?

    --
    Jedaï

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut
    Ok c'est tout bon maintenant. Ca marche bien mieux avec ta syntaxe Eurocents

    Merci a tous pour votre aide.

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

Discussions similaires

  1. écriture dans un fichier via Perl
    Par matttimon dans le forum Langage
    Réponses: 1
    Dernier message: 21/04/2010, 12h20
  2. Telecharger un fichier excel depuis le web via PERL
    Par ptimos93800 dans le forum Web
    Réponses: 3
    Dernier message: 19/03/2009, 18h38
  3. Peut-on convertir fichier ods en csv via perl ?
    Par Badaboumpanpan dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2009, 00h33
  4. Pb pour générer fichier wsdl via Perl
    Par coyaote dans le forum Web
    Réponses: 0
    Dernier message: 29/10/2008, 18h00
  5. Réponses: 3
    Dernier message: 31/03/2008, 13h59

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