2012-03-21 7 views
40
find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {} 

¿es una buena solución? para encontrar TEXTSEARCH de forma recursiva en sólo archivos de textogrep solo archivos de texto

+0

Podría por favor acepte la respuesta con los millardos de upvotes lugar? –

+1

ok gracias @ Zoltán – StefanoCudini

Respuesta

165

Puede utilizar el -r (recursiva) y -I (ignorar binario) opciones en grep:

$ grep -rI "TEXTSEARCH" . 
  • -I procesar un archivo binario como si lo hiciera no contiene datos coincidentes; esto es equivalente a la opción --binary-files=without-match.
  • -r Lea todos los archivos debajo de cada directorio, recursivamente; esto es equivalente a la opción -d recurse.
+14

Esta es la respuesta correcta. – PhiloSurfer

+8

@PhiloSurfer: simplemente vote por él. ;) –

+0

No, este no puede ignorar un archivo especial, como unix socket – hylepo

3

Otra solución menos elegante que kevs, es decir, a la cadena de comandos en -exec encuentran juntos, sin xargs y cortar:

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

Mire la siguiente respuesta. No use este. – coder543

+0

¿Qué problema ves con este? –

+2

es complejo e ineficiente. La herramienta grep integrada es capaz de resolver la pregunta con un solo indicador. Esta respuesta puede hacer el trabajo, pero es una solución pobre, a la luz de la existencia del otro. ¿No estarías de acuerdo? – coder543

Cuestiones relacionadas