Script de purge sous linux

Fermé
Shake Norris - 1 févr. 2013 à 09:12
dubcek Messages postés 18784 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 avril 2025 - 1 févr. 2013 à 16:21
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
A voir également:

8 réponses

Flachy Joe Messages postés 2102 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
1 févr. 2013 à 10:06
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
1 févr. 2013 à 09:36
Salut,

Sur quel système ? Unix ou Gnu/Linux ?
Quel shell ?
0
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
dubcek Messages postés 18784 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 avril 2025 5 630
1 févr. 2013 à 11:08
hello
faut-il se baser sur la date du fichier ou sur celle contenue dans le nom ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
dubcek Messages postés 18784 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 avril 2025 5 630
1 févr. 2013 à 15:17
donc dans le répertoire 421, garder les 5 plus récents switch01, switch02, etc ?
0
exacte :)
0
dubcek Messages postés 18784 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 avril 2025 5 630
1 févr. 2013 à 16:21
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