Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2703 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/Bash] Compter nombre de fichiers dans un répertoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell/Bash] Compter nombre de fichiers dans un répertoire

n°1788525
Neo_t3
Posté le 18-09-2008 à 11:32:35  profilanswer
 

Hello  :hello:  
 
Dans le cadre d'une supervision via Nagios, je dois compter le nombre de fichiers dans un répertoire donné, ainsi qu'un de ses sous répertoire nommé "error" (donc deux résultats distincts).
Jusque là pas de probleme je fais ceci :


NBFILE1=$(ls -A1 $MONREPERTOIRE | wc -l)
NBFILE2=$(ls -A1 $MONREPERTOIRE/error/ | wc -l)


 
Maintenant j'aimerai si dans $MONREPERTOIRE si j'ai moins de 5 fichiers.
Mais également que si dans $MONREPERTOIRE/error/ si j'ai moins de 1 fichiers.
 
D'après tout ça, je dois sortir soit en exit0 si OK et exit2 si KO (nb fichiers supérieur au seuil), mais également afficher via un echo, le ou les répertoire(s) depassant ce seuil limite.
 
Pourriez vous m'aider svp ?


---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
mood
Publicité
Posté le 18-09-2008 à 11:32:35  profilanswer
 

n°1788528
Elmoricq
Modérateur
Posté le 18-09-2008 à 11:33:38  profilanswer
 

man test
 
Par exemple en ksh :
if [ "$NBFILE1" -ge 5 ]
then
   blabla
fi

n°1788533
Neo_t3
Posté le 18-09-2008 à 11:40:01  profilanswer
 

Elmoricq a écrit :

man test
 
Par exemple en ksh :
if [ "$NBFILE1" -ge 5 ]
then
   blabla
fi


 
Merci beaucoup, j'ai oublié de préciser, je sais y arriver comme cela puisque mon script fonctionnait auparavant mais en comptant que dans $MONREPERTOIRE, pas de la sous répertoire error.
 


#!/bin/sh
 
MONREPERTOIRE=$1
SEUILCRITIQUE=$2
 
MAVALEUR=$(ls -A1 $MONREPERTOIRE | wc -l)  
 
if [ $MAVALEUR -gt $SEUILCRITIQUE ]
then  
echo "CRITICAL - Le nombre de fichiers ($MAVALEUR) en attente dans $MONREPERTOIRE a depasse le seuil critique de $SEUILCRITIQUE fichiers"  
exit 2
fi
echo "OK - Le nombre de fichiers en attente dans $MONREPERTOIRE est correct"
exit 0


 
Ce que je n'arrive pas c'est imbriqué tout ça avec le sous répertoire...


Message édité par Neo_t3 le 18-09-2008 à 11:41:55

---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
n°1788542
Elmoricq
Modérateur
Posté le 18-09-2008 à 11:49:25  profilanswer
 

Tu veux faire les deux tests en même temps, si j'ai bien compris ?

n°1788551
Neo_t3
Posté le 18-09-2008 à 12:07:30  profilanswer
 

Elmoricq a écrit :

Tu veux faire les deux tests en même temps, si j'ai bien compris ?


 
Oui voila, faire les deux test, et obtenir :
- Un etat OK si les deux répertoire ne dépassent pas leur seuil
- Une alarme CRITICAL si un répertoire dépassent le seuil en affichant ce répertoire


---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
n°1788556
Elmoricq
Modérateur
Posté le 18-09-2008 à 12:09:12  profilanswer
 

if [ test1 -o test2 ]

 

ou

 

if [ test1 ] || [ test2 ]

Message cité 2 fois
Message édité par Elmoricq le 18-09-2008 à 12:09:22
n°1788583
Neo_t3
Posté le 18-09-2008 à 12:36:24  profilanswer
 

Elmoricq a écrit :

if [ test1 -o test2 ]
 
ou
 
if [ test1 ] || [ test2 ]


 
Thanks j'ai deja un debut,
 
En fait c'est :  
- si test1 et test2 sont inferieur à 1 alors OK
- si test1 est superieur a 5 alors KO
- si test2 est superieur a 1 alors KO
 
Et si test1 et test2 depassent leur seuil (1 et 5) alors KO sur les deux rep


Message édité par Neo_t3 le 18-09-2008 à 12:40:33

---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
n°1788590
Elmoricq
Modérateur
Posté le 18-09-2008 à 13:18:39  profilanswer
 

if [ condition1 -lt 1 -a condition2 -lt 1 ]
ou
if [ condition1 -lt 1 ] && [ condition2 -lt 1 ]
 
Pour les deux autres tu devrais y arriver.
 
Encore une fois : man test

n°1788712
Neo_t3
Posté le 18-09-2008 à 16:03:35  profilanswer
 

Merci beaucoup, j'ai pu avancer un peu mais le script s'arrete au premier OK
 


#!/bin/sh
 
MONREPERTOIRE=$1
SEUILCRITIQUE=$2
SEUILCRITIQUE2=$3
 
NBFILE1=$(ls -A1 $MONREPERTOIRE | wc -l)
NBFILE2=$(ls -A1 $MONREPERTOIRE/error/ | wc -l)
 
 
if [ $NBFILE1 -gt $SEUILCRITIQUE -a $NBFILE2 -gt $SEUILCRITIQUE2 ]; then
echo "CRITICAL - Il y a $NBFILE1 fichiers en erreur dans $MONREPERTOIRE et $NBFILE2 fichiers en erreur dans $MONREPERTOIRE/error"
exit 2
fi
 
if [ $NBFILE1 -le $SEUILCRITIQUE ]; then
echo "CRITICAL - Il y a $NBFILE1 fichiers en erreur dans $MONREPERTOIRE"
exit 2
else
echo "OK - Le nombre de fichiers en attente dans le repertoire est correct"
exit 0
fi
 
if [ $NBFILE2 -le $SEUILCRITIQUE2 ]; then
echo "CRITICAL - Il y a $NBFILE2 fichiers en erreur dans $MONREPERTOIRE/error"
exit 2
else
echo "OK - Le nombre de fichiers en attente dans le repertoire est correct"
fi


 


sh check_number_of_file.sh /tmp 1 1
OK - Le nombre de fichiers en attente dans le repertoire est correct


 
Faut il imbriquer les deux derniers blocs avec un elif ?


Message édité par Neo_t3 le 18-09-2008 à 16:04:33

---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
n°1788715
Neo_t3
Posté le 18-09-2008 à 16:11:56  profilanswer
 

J'ai trouvé c'est OK :
 


#!/bin/sh
 
MONREPERTOIRE=$1
SEUILCRITIQUE=$2
SEUILCRITIQUE2=$3
 
NBFILE1=$(ls -A1 $MONREPERTOIRE | wc -l)
NBFILE2=$(ls -A1 $MONREPERTOIRE/error/ | wc -l)
 
 
if [ $NBFILE1 -gt $SEUILCRITIQUE -a $NBFILE2 -gt $SEUILCRITIQUE2 ]; then
echo "CRITICAL - Il y a $NBFILE1 fichiers en erreur dans $MONREPERTOIRE et $NBFILE2 fichiers en erreur dans $MONREPERTOIRE/error"
exit 2
fi
 
if [ $NBFILE1 -gt $SEUILCRITIQUE ]; then
echo "CRITICAL - Il y a $NBFILE1 fichiers en erreur dans $MONREPERTOIRE"
exit 2
fi
 
if [ $NBFILE2 -gt $SEUILCRITIQUE2 ]; then
echo "CRITICAL - Il y a $NBFILE2 fichiers en erreur dans $MONREPERTOIRE/error"
exit 2
fi
 
if [ $NBFILE1 -le $SEUILCRITIQUE -a $NBFILE2 -le $SEUILCRITIQUE2 ]; then
echo "OK : Aucun fichiers en attente dans le repertoire"
exit 0
fi


---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com
mood
Publicité
Posté le 18-09-2008 à 16:11:56  profilanswer
 

n°1789691
Sve@r
Posté le 20-09-2008 à 11:30:21  profilanswer
 

Elmoricq a écrit :

if [ test1 -o test2 ]
 
ou
 
if [ test1 ] || [ test2 ]
 
if [ condition1 -lt 1 -a condition2 -lt 1 ]
ou
if [ condition1 -lt 1 ] && [ condition2 -lt 1 ]


 
Il faut faire attention à chaque écriture car elle n'est pas tout à fait équivalente.
 
La première, qui utilise les connecteurs "-a" (and) et "-o" (or) de l'instruction "test" correspond à un seul appel de cette instruction. Celle-ci est appelée une fois et fait toutes les comparaisons demandées même si le test est déjà définitif et devient donc inutile.
 
Exemple

Code :
  1. test -n "hello" -o -n "`touch /tmp/toto`"


Etant donné que "hello" n'est pas une chaine vide, le test est déjà vrai. Pourtant le fichier "/tmp/toto" est quand-même créé.
 
La seconde est une suite de deux instructions séparées par un connecteur and/or traité par le shell lui-même (et non par la commande "test" ). Il y a donc deux appels à l'instruction test mais si l'un des tests devient définitifs, l'ensemble s'arrête
 
Exemple

Code :
  1. test -n "hello" || test -n "`touch /tmp/toto`"


Le fichier "/tmp/toto" ne sera jamais créé
 
C'est bien de le savoir. Mais malgré le fait que l'ensemble "&&" et "||" puisse être plus rapide, personnellement je préfère utiliser "-a" et "-o" (et utiliser intelligemment le tableau de Karnaugh pour optimiser moi-même)...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/Bash] Compter nombre de fichiers dans un répertoire

 

Sujets relatifs
MCI: paramètres audio (volume...) ne marchent pas sur les fichiers wavLister / naviguer dans des répertoires via Tomcat
Les fichiers de style CSS ne se chargent pas!script bat pour effacer sous repertoire, sauf certain
JSP upload repertoire[batch]fichiers modifiés après une certaine date
probleme vb excel inter fichiers[shell] problème dans un for
Script shell et menu[PHP] gzipper les fichiers CSS
Plus de sujets relatifs à : [Shell/Bash] Compter nombre de fichiers dans un répertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR