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
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
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
.
Esta es la respuesta correcta. – PhiloSurfer
@PhiloSurfer: simplemente vote por él. ;) –
No, este no puede ignorar un archivo especial, como unix socket – hylepo
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 {} ";"
Mire la siguiente respuesta. No use este. – coder543
¿Qué problema ves con este? –
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
Podría por favor acepte la respuesta con los millardos de upvotes lugar? –
ok gracias @ Zoltán – StefanoCudini