PDA

Afficher la version complète : Une petite facile



LeDuc08
19/05/2009, 15h41
Bonjour à tous,
Je viens m'en remettre à vous pour une petite explication, j'ai trouvé une ligne dans un bout de script dont je n'arrive pas à comprendre l'utilité.
Cette ligne vient d'un script écrit par Sebastien Godard le développeur de sysstat (http://perso.orange.fr/sebastien.godard/index.html).
A la vue de son travail, je ne vais pas un instant remettre en cause ce qu'il a fait, et je voudrais donc comprendre à quoi cela sert:
Voici la fameuse ligne:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>DFILE=unFichier
[ -f "$DFILE" ] && find $DFILE -mtime +1 && rm -f $DFILE >/dev/null 2>&1</div>

Je comprend bien les différentes parties indépendamment les unes des autres: le test sur l'existence du fichier, le find sur la date de modification et le rm sur le fichier.
Mais, je me rend compte que quelque soit le résultat du find, le rm s'effectue à chaque fois. A quoi sert dans ce cas le find ??? :blink:

Merci d'avance à ceux qui pourront éclairer ma lanterne ;)

Edit: Je viens de me rendre compte que je n'ai pas posté dans le bon forum, je présente mes excuses aux administrateurs/modérateurs...

Voici le code du script dans son intégralité:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>#!/bin/sh
## sarl (
# written by FBA/XCH
#
PATH=/usr/lib64/sa:/usr/lib/sa:/bin:/usr/bin
LANG=C
TEMP=$1
SEC=${TEMP:-60}
DATE=`date +%d`
for i in /var/adm/sa /var/log/sa ; do
if [ -d $i ] ; then DDIR=$i ; break ; fi
done
DFILE=$DDIR/sa$DATE
cd $DDIR
[ -f "$DFILE" ] && find $DFILE -mtime +1 && rm -f $DFILE >/dev/null
2>&1
H=`date '+%H'`
M=`date '+%M'`
LEFT=`expr \( 3600 \* 24 - 1 - $H \* 3600 - $M \* 60 \) / $SEC`
( exec sadc $SEC $LEFT $DFILE </dev/null >/dev/null 2>&1 ) &
</div>

genome
23/05/2009, 11h04
Salut,

En effet, le "find" a l'air de ne servir à rien...
Quelle que soit la date de modification du fichier, le code retour vaut toujours zéro, donc le "rm" est exécuté.

Faudrait demander à l'auteur... ;)

Strash
07/11/2009, 15h28
si le find renvoie une erreur le rm ne sera pas exécuté. Les && enchainent les commandes uniquement si la commande précédente s'est bien terminée. Après faudrait voir le reste du script pour comprendre pourquoi le find pourrait renvoyer une erreur dans ce cas là.

yoplait
07/11/2009, 17h09
[ déplacé dans la section programmation ... qu'il est bon de remplir, c'est cool ;) ]