Bonjour,
j'envisage de réaliser un script me permettant de purger un répertoire contenant des logs de mes scripts.
Ces logs ont pour noms:
[nom_du_script].log
et sont archivés chaque jour sous:
[nom_du_script]_YYYYMMDD.log
Je souhaites soit garder les n derniers logs (cas pour les scripts qui ne tournent pas chaques jours), soit les logs des n derniers jours.
je suis parti sur la commande suivante pour trouver les n derniers logs archivés:
ls -r --sort=time [nom_du_script]_* | tail -n [nombre_a_conserver]
Mais après je sèche pour effacer les plus anciens...
En déplacant ceux-ci et supprimant tous les autres?
Y-a-t-il une solution plus simple/propre? Une commande particulière qui serait plus pratique ici?
Merci
(je cherche plus des pistes de réflexion qu'une soluce "toute faite", bien que n'étant pas contre non plus ;) )
# Bein
Posté par LaBienPensanceMaTuer . Évalué à 5.
# head -n -N
Posté par tgl . Évalué à 3.
ls -r --sort=time [nom_du_script]_* | head -n -[nombre_a_conserver]
Et puis sinon, bah [+] pour logrotate, qui rend vraiment de très fiers services.
# Sinon, à la main
Posté par LaBienPensanceMaTuer . Évalué à 2.
Résultat:
rm h g f e d c
keep b a
_ Tu met dans KEEP le nombre de fichiers que tu veux garder+1 (bizarrement d'ailleurs, je sais pas trop pourquoi tail a ce comportement dans le cas présent mais pas le temps de chercher).
_ $(( )) te permet de faire de l'arithmétique en shell.
_ tr te permet de virer les retours chariots et de les remplacer par des espaces pour que rm n'emmerde pas le monde :)
[^] # Re: Sinon, à la main
Posté par Paddle . Évalué à 1.
je rajoute un -1 dans le ls sans quoi il me met tout a la ligne (et le wc -l patauge par ex...)
LIST=$(ls -1 -r --sort=time cequetuveux*)
Le tail fonctionne normalement pour moi, pas besoin de faire +1 a la variable KEEP.
Pour info, je suis sous RedHat AS3 et ksh.
Merci encore!
# find
Posté par Bastien Mourgues . Évalué à 1.
tu as un fichier log par jour, tu veux garder les n derniers :
find /rep/ -name 'nom_du_script*.log' -a -mtime +n -exec rm {} \;
(Pour tester, remplace rm {} par rm -i {} si tu veux)
Cela effacera les fichiers dont le nom correspond à nom_du_script*.log et dont la date de modification est supérieure à n jours (donc il te restera les n derniers :) ).
# Merci
Posté par Paddle . Évalué à 1.
Je ne connaissais pas les commandes logrotate et head. Une bonne occasion de les découvrir!
Et merci pour le script proposé aussi. Je dois pouvoir me baser dessus effectivement!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.