2010-08-21 12 views
10

Tengo un montón de carpetas y subcarpetas. Cada uno contiene, entre otras cosas, un archivo de texto llamado index.yml con datos útiles. Quiero buscar a través de todos los diferentes archivos index.yml para encontrar instancias de una cadena de búsqueda. Debo poder ver algunas líneas de contexto y el directorio del archivo index.yml que se encontró.Buscar recursivamente archivos de un nombre dado y buscar instancias de una frase particular Y mostrar la ruta a ese archivo

Esto casi funciona, pero no me da el nombre de archivo:

cat `find . -name 'index.yml'`| grep -i -C4 mySearchString 

¿Cómo puedo hacer esto y obtener el nombre del archivo?

Estoy atascado en Windows con el uso de msys. Tenga en cuenta que no parece tener un grep completo de GNU, así que no puedo ejecutar grep --exclude o grep -R como se sugiere en otras preguntas de SO.

Respuesta

10

probar esto: Nota

find -name "index.yml" -exec grep -i -H -C4 pattern {} \; 

: en realidad no probado bajo MSYS.

+0

Esta es la respuesta correcta para un sistema de tipo Unix normal. No pude obtener algo como esto, o una variedad xargs para trabajar en cygwin –

+0

¡Genial! Gracias. Tan pronto como SO me lo permita ... aceptaré esta respuesta. Parece ser un límite de tiempo. – AndyL

+0

Entonces, ¿qué hace {} \; ¿hacer? – AndyL

0

Una posibilidad (no sé lo que MSYS acepta exactamente):

find . -name index.yml -exec grep -i -C4 mySearchString /dev/null {} + 

El /dev/null sirve para asegurarse de que hay al menos dos rutas de acceso para que el nombre de ruta se imprime con cada partido. La opción -H de grep tiene un efecto similar.

El constructo -exec ... + en find hace que múltiples caminos se pasen a una sola instancia del comando. Si no está implementado, deberá usar -exec ... \;.

Cuestiones relacionadas