OVH Cloud OVH Cloud

Recherche du texte dans le contenu des fichiers d'un dossier

35 réponses
Avatar
Alain Matthes
Bonjour

Nouveau sous linux, je me demande quelle est la bonne méthode pour
rechercher du texte dans des fichiers d'un dossier ou d'une partition

merci

Alain Matthes

10 réponses

1 2 3 4
Avatar
Gity
Bonjour,
Il me semble que la commande find pipée avec grep te conviendra
parfaitement.
find <répertoire de recherche> |grep <chaîne de caractères à rechercher>
Pour plus de détails, vois aussi man find et man grep.
Bye

Le Tue, 25 Apr 2006 07:10:32 +0200, Alain Matthes a écrit :

Bonjour

Nouveau sous linux, je me demande quelle est la bonne méthode pour
rechercher du texte dans des fichiers d'un dossier ou d'une partition

merci

Alain Matthes


Avatar
didier gaumet
consulte la page man de grep (man grep dans un terminal).
pour trouver la chaîne toto dans le répertoire courant:
grep toto *
Avatar
Laurent
find <répertoire de recherche> |grep <chaîne de caractères à rechercher>
pas très économe en processus...

un "grep -R <chaine> *" suffira amplement (man grep .. etc..)

Avatar
nicolas
Laurent wrote:

pas très économe en processus...
un "grep -R <chaine> *" suffira amplement (man grep .. etc..)


Ce qui se fait aussi avec rgrep.

nicolas patrois : pts noir asocial
--
DRESSAGE

M : Je lui donne la patte... il me donne le sucre... Cronch ! Miom ! Je
l'ai parfaitement conditionné, ce con...

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:444de940$0$9652$,
*Laurent* tapota sur f.c.o.l.configuration :

find <répertoire de recherche> |grep <chaîne de caractères à rechercher>


pas très économe en processus...


C'est surtout que ça ne fonctionnera pas ou tout du moins que ça ne fera pas
ce qui est demandé par l'OP à savoir chercher du texte dans les fichiers et
non pas dans le nom des fichiers.

La bonne commande aurait été :

find [options] | xargs [...] grep pattern

Mais la remarque n'était pas là.

un "grep -R <chaine> *" suffira amplement (man grep .. etc..)


On peut améliorer les performances et le résultat de la commande GNU grep en
lui ajoutant quelques bonnes options :

$ grep --recursive --files-with-matches --devices=skip --no-messages
pattern /path

ou plus simplement :

$ grep -r -l -D skip -s pattern /path

Résultat : on y gagne en rapidité et en clarté d'affichage.

La question maintenant est de savoir, en terme d'économie de ressources,
s'il vaut mieux utiliser le couple find/grep avec les bonnes options ou
uniquement grep ?
Et bien c'est le couple find/grep qui est le grand gagnant car il est plus
économe. Démonstration :

# time find /var/log -type f -print0 | xargs -r0 grep -l tichou
real 0m6.807s
user 0m0.280s
sys 0m0.510s

# time grep -r -l -D skip -s tichou /var/log
real 0m7.787s
user 0m0.580s
sys 0m0.690s

(sans parler du fait qu'ici la commande grep a bénéficié de l'effet cache de
la précédente commande)

--
Sébastien Monbrun aka TiChou


Avatar
Alain Matthes
On 2006-04-25 16:16:48 +0200, Sébastien Monbrun aka TiChou
said:


La question maintenant est de savoir, en terme d'économie de
ressources, s'il vaut mieux utiliser le couple find/grep avec les
bonnes options ou uniquement grep ?
Et bien c'est le couple find/grep qui est le grand gagnant car il est
plus économe. Démonstration :

# time find /var/log -type f -print0 | xargs -r0 grep -l tichou
real 0m6.807s
user 0m0.280s
sys 0m0.510s

# time grep -r -l -D skip -s tichou /var/log
real 0m7.787s
user 0m0.580s
sys 0m0.690s

(sans parler du fait qu'ici la commande grep a bénéficié de l'effet
cache de la précédente commande)


Merci pour tous ses renseignements très utiles

Alain Matthes

Avatar
Laurent
# time find /var/log -type f -print0 | xargs -r0 grep -l tichou
real 0m6.807s

# time grep -r -l -D skip -s tichou /var/log
real 0m7.787s


Bon, ben j'ai rien dit, alors :)

Pour info, j'ai refait ces test sur mon propre répertoire /var/log... et
ça confirme tes chiffres, même si les miens sont nettement supérieurs...
Il n'y a rien dans ton /var/log ;)

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:444e4010$0$9648$,
*Laurent* tapota sur f.c.o.l.configuration :

Pour info, j'ai refait ces test sur mon propre répertoire /var/log... et
ça confirme tes chiffres, même si les miens sont nettement supérieurs...
Il n'y a rien dans ton /var/log ;)


# du -bs /var/log
360341778

# { find /var/log -type f -name '*.gz' -print0 | xargs -0 zcat ;
find /var/log -type f ! -name '*.gz' -print0 | xargs -0 cat ; }
| wc -c
592233564

# { find /var/log -type f -name '*.gz' -print0 | xargs -0 zcat ;
find /var/log -type f ! -name '*.gz' -print0 | xargs -0 cat ; }
| wc -l
3919705

Plus de 560Mo de log, pas loin de 4 millions de lignes de log et tu trouves
qu'il n'y a rien ? :-P
En même temps, c'est vrai, il n'y a pas grand chose dans /var/log car en
fait il y en a ailleurs... dans /srv/*/var/log, là où sont chrootés la
plupart des services de cette machine.

--
Sébastien Monbrun aka TiChou

Avatar
capfree
Bonjour

Nouveau sous linux, je me demande quelle est la bonne méthode pour
rechercher du texte dans des fichiers d'un dossier ou d'une partition

merci

Alain Matthes

Bonjour


rechercher du texte dans des fichiers


Pour un nombre limité de fichiers, en les ouvrant un par un avec OOo
Writer, c'est facile et même agréable.

Avatar
Emmanuel Florac
Le Wed, 26 Apr 2006 00:42:28 +0200, capfree a écrit :


Pour un nombre limité de fichiers, en les ouvrant un par un avec OOo
Writer, c'est facile et même agréable.


Sûrement toi plaisantes ?

--
Je suis riche des biens dont je sais me passer.
Louis-Jean-Baptiste Etienne Vigée.

1 2 3 4