Buscar una cadena recursivamente mientras está en el directorio actual

15

Quiero buscar todos los archivos de forma recursiva desde el directorio en el que estoy para una cadena particular.

Lo intenté

grep -r -i my_string

y lo probé en una carpeta de prueba con dos archivos pequeños pero no encontraba la cadena.

Además, ¿hay alguna forma especial de definir "contiene" en lugar de hacer coincidir la palabra completa?

David
fuente
3
Probar grep -r -o -i "your_string" *(con "comillas).
pl1nk
recibo algunos mensajes de permiso denegado, ¿simplemente ignora esos archivos pero continúa revisando el resto?
David
Correcto, estos archivos están siendo ignorados.
pl1nk

Respuestas:

27

¿Está buscando un nombre de archivo o una palabra dentro de un archivo? grep busca dentro de los archivos, que parece ser lo que quieres.

grep usa expresiones regulares; de hecho, eso es lo que significa la parte "re". Por lo tanto, no utiliza los comodines bash normales; es decir, abc*no encontraría palabras que comenzaran con abc, encontraría palabras que comenzaran con ab, luego cero o más c seguidas. Pero sí, si simplemente le da un patrón, lo encontrará en cualquier lugar, sin conocimiento de palabras completas. Si quisiera encontrar palabras completas, necesitaría crear una expresión regular para decirlo.

Pero, como la mayoría de los comandos, debe colocar los nombres de archivo al final del comando, por lo que su ejemplo simplemente se quedaría allí y esperaría el nombre de archivo.

Como dijo @plink, use

grep -r -o -i "your_string" *

(o *.*, u otra especificación de archivo). Los errores pueden ser ignorados. Si recibe muchos errores, puede agregarlos 2>/dev/nullal final, lo que redirigirá stderr a un dispositivo nulo.

Marty Fried
fuente
66
Para aquellos curiosos: -r significa recursivo (es decir, se ve en la carpeta actual y TODAS las carpetas en la carpeta actual Y todas las carpetas en esa carpeta ... hasta el infinito), -o significa que no muestra toda la línea, y -i es ignorar caso.
BKSpurgeon
@johnsnails El backtick no es necesario. Es más probable que sea un error de formato en Stack Exchange cuando se publica como bloque de código en línea.
tom_mai78101
Sí, eso tiene sentido.
johnsnails