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

Shell et commandes GNU Discussion :

Script de purge sous linux


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut Script de purge sous linux
    Bonjour,

    Explication du contexte...
    J'ai des switchs CISCO qui envoient leur configuration sur un serveur tftp automatiquement a chaque modification de celle ci sur l'equipement.
    L'objectif est de garder seulement 5 sauvegardes, soit les 5 plus recentes.
    La forme du nom des fichiers est:
    switch01-421--Mar--1-1993-01-03-34.974-GMT-0
    Où "switch01" correspond au nom de l'equipement; "421" represente l'usine où est l'equipement (qui pourrait etre supprimé); ensuite la date, et tout a la fin un numero d'increment (le numero d'increment repart a "0" a chaque reboot de l'equipement.
    Sur le serveur tftp, j'ai un repertoire par usine... soit une arboressence:
    serveur-tftp/421
    /533
    /679

    Note importante, il peut y avoir 50 sauvegardes du meme equipement en une journée comme une seule par an...
    L'idée serait de programmer un tache cron tous les jours, qu'elle scanne le repertoire "serveur-tftp" (recursivement) et que dans chaque repertoire elle garde seulement les 5 dernieres sauvagerdes de chaque equipement...

    alors ca fait un moment que j'ait pas fait de bash ou autre script... donc je viens vers vous pour savoir comment faire cette fameuse boucle, et le decoupage de nom de fichiers (ou utilisation de la date de creation de fichier) pour pouvoir selectionner les fichiers a garder ou effacer...

    PS : j'espere etre dans la bonne categorie pour poster...


    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Peut-on compter sur la date de dernière modification des fichiers?
    C'est-à-dire, est-on sûr qu'ils ne sont jamais modifiés après leur création?

  3. #3
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Oui, les fichiers ne seront jamais modifiés

  4. #4
    Invité
    Invité(e)
    Par défaut
    A tester chez toi (le echo est à remplacer par le rm) mais ça serait une solution s'il n'y a pas d'espace dans le nom de tes fichiers.

    Le "ls -t" retourne les fichiers classés par date de création (le plus récent en 1er : ordre de création dans mon test: azerty) et on stocke ça dans une liste. Il suffit alors d'ignorer les 5 premiers et de supprimer les autres.

    Mais il y a peut être mieux à faire.

    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
    $ ls switch01-421*
    switch01-421-a  switch01-421-r  switch01-421-u  switch01-421-z
    switch01-421-e  switch01-421-t  switch01-421-y
     
    $ liste=`ls -t switch01-421*`
     
    $ i=1
     
    $ for fichier in $liste
    > do
    >   if [ $i -gt 5 ]
    >   then
    >     #rm $fichier
    >     echo $fichier
    >   fi
    >   ((i++))
    > done
    switch01-421-z
    switch01-421-a

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Une autre méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in *
    do 
       [ -d $i ] && find ./$i -type f -printf '%C@/%p\n' | sort -n | head -n -5 | cut -d\/ -f2- | xargs echo
    done
    De même, il suffit de remplacer le
    echo
    par
    rm -f
    Cordialement.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,

    for d in */, ainsi le test -d devient inutile.


    un spécification a été ajoutée sur le forum d'un autre site sur lequel shake.norris a également posté :
    Et il faut aussi que je prene le debut du nom de fichier en compte, car il y a plusieurs switch sauvegardés dans un seul répertoire...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ah voilà un truc que je cherchais mais j'avais oublié le -n dans le head.
    Du coup j'ai peut être plus simple à comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    equipement=switch01
    usine=421
    liste=`ls -rt $equipement-$usine* | head -n -5`
     
    if [ ${#liste} -gt 0 ]
    then
     echo $liste
     #rm $liste
    fi
    Il reste à le faire dans tout les répertoires avec les bons nom d'équipement et d'usine. A toi de nous dire si tu les connais d'avance ou non

Discussions similaires

  1. Script qui marche sous Linux mais pas sous Windows et vice versa
    Par tu-phat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 26/11/2009, 02h39
  2. script php exec sous linux help
    Par pretorien51 dans le forum Apache
    Réponses: 10
    Dernier message: 23/09/2008, 17h39
  3. Scripts de démarrage sous linux
    Par Info_76 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/07/2007, 11h35
  4. script php sous linux ???
    Par Florina dans le forum Langage
    Réponses: 5
    Dernier message: 13/12/2005, 17h14
  5. Réponses: 4
    Dernier message: 24/10/2005, 08h36

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