Script de purge sous linux

Shake Norris -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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

8 réponses

  1. Flachy Joe Messages postés 2303 Statut Membre 261
     
    Salut,
    voila une commande qui affiche tous les fichiers d'un répertoire sauf les 4 fichiers les plus récents :
    find . -maxdepth 1 -type f -printf "%T@ %p\r\n" | sort | awk '{print $2 }'| head -n -4


    Bonne continuation.
    1
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Sur quel système ? Unix ou Gnu/Linux ?
    Quel shell ?
    0
  3. Shake Norris
     
    C'est une CentOS 5.4

    Mouarfffffff sacré commande ^^ bon je vais testé ca... et puis après il faut que j'arrive a faire une recherche récursive sur plusieurs répertoires...
    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...

    Merciiiii :)
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    faut-il se baser sur la date du fichier ou sur celle contenue dans le nom ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Shake Norris
     
    Ben c'est normalement la meme... il faut utilisé la facon la plus simple possible... mais ne pas oublié qu'il faut prendre en compte le debut du nom de fichier... donc 2 paramètres...

    merci...
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    donc dans le répertoire 421, garder les 5 plus récents switch01, switch02, etc ?
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    je testerais avec la commande de Flachy Joe dans 2 boucles
    cd serveur-tftp
    for USINE in *;do
       cd $USINE
       for SWITCH in $(ls switch* | sed 's/-.*$//' | sort -u); do
           find . -maxdepth 1 -iname "$SWITCH*" -type f -printf "%T@ %p\r\n" | sort | awk '{print $2 }'| head -n -4
       done
       cd ..
    done
    
    0