68 votes

grep uniquement les fichiers texte

find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}

c'est une bonne solution ? pour trouver TEXTSEARCH de façon récursive dans les seuls fichiers textuels

242voto

kev Points 41855

Vous pouvez utiliser le -r (récursif) et -I (ignorer les options binaires) en grep :

$ grep -rI "TEXTSEARCH" .
  • -I Traiter un fichier binaire comme s'il ne contenait pas de données correspondantes ; cela équivaut à la fonction --binary-files=without-match option.
  • -r Lire tous les fichiers sous chaque répertoire, de manière récursive ; ceci est équivalent à la commande -d recurse option.

0 votes

Non, celui-ci ne peut pas ignorer un fichier spécial, comme unix socket.

8voto

user unknown Points 15555

Une autre solution, moins élégante que kevs, consiste à enchaîner les commandes -exec dans find, sans xargs et cut :

find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";"

26 votes

Regardez la réponse suivante. N'utilisez pas celle-ci.

0 votes

Quel problème voyez-vous avec celui-ci ?

3 votes

Il est complexe et inefficace. L'outil grep intégré est capable de résoudre la question avec un seul drapeau. Cette réponse peut faire l'affaire, mais c'est une mauvaise solution, compte tenu de l'existence de l'autre. N'êtes-vous pas d'accord ?

6voto

Mark B Points 428

Si vous connaissez l'extension du fichier que vous souhaitez rechercher, il existe un moyen très simple de rechercher tous les fichiers *.txt dans le répertoire actuel, de manière récursive dans tous les sous-répertoires, sans tenir compte de la casse :

grep -ri --include=*.txt "sometext" *

3 votes

Le site --include Le drapeau a besoin d'un motif global entre guillemets. Tel quel, cela ne fonctionnera pas, plutôt comme ceci : --include="*.txt" .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X