La commande suivante devrait te convenir:
file ton-repertoire/* | grep <pattern> | wc | awk '{ print $1 ;}'
... ou pattern est a trouver dans le fichier /usr.../magic, je me rappelle
plus
exactement sa localisation (ca depend des distribs, non ?)
Et puis normalement, le premier nombre retourné par "wc" est le nbre de
lignes,
mais c'est à verifier, sinon il faut prendre le $2 ou le $3 dans le "awk"
-------------------------------------------------
Sylvain Ferigo [
mailto:ferigo@club-internet.fr]
Teamlog Ecully (69), France / CRIT RPoulenc
Phone: +33 472 002 092 / Mobile: +33 610 511 926
> -----Message d'origine-----
> De: Olivier Delemar [mailto:delemar@mimosa.ceng.cea.fr]
> Date: jeudi 18 novembre 1999 09:16
> À: guilde@???
> Objet: Re: Shell Script > 2 ou 3 questions
>
>
>
> Le 18-Nov-99, Frederic Mantegazza écrivait:
> >> 1 comment on récupère le nombre de fichier d'un type
> >> donnée d'un répertoire
> >
> > Je ne sais pas s'il y a une commande speciale, sinon il
> suffit de compter.
>
> Pas de commande spéciale à ma connaissance, mais des
> comandes adaptées,
> oui. Par exemple :
> find . -type <type> -print |wc -l
> Attention : find descend dans les sous répertoires (mais on
> peut l'en empêcher,
> cf. page man).
>
> Les types de fichiers connus par "find -type" étant
> peu nombreux, tu
> peux aussi utiliser "file" dans une boucle.
>
> >#!/bin/sh
> >
> > files=`ls`
> > i=0
> > for f in $files
> > do
> > i=i+1 (la je ne suis pas sur)
>
> Pour les shells POSIX (bash, ksh par exemple), les
> opérations doivent
> être entourées de $(( ... )). En cshell (csh, tcsh), la
> variable recueillant le
> résultat doit être déclarée avec "@" au lieu de "set" :
>
> set texte = "Ligne numéro "
> @ compte = 1
> while ($compte < 10)
> echo $texte $compte
> @ compte++
> #Ou bien :
> @ compte += 1
> #Ou alors
> @ compte = $compte + 1
> end
>
> Quant au modulo, je crois effectivement qu'il faut
> l'opérateur "%",
> mais avec les $((...)) ou le @ qui va bien.
>
>
> O. Delemar, CS-SI. ATHESA
> CEA/CENG, Bat. T, 17 Av. des Martyrs, GRENOBLE
> Tel. 04 76 88 50 16
>