2012-05-17 25 views
12

Tengo un directorio llamado XYZ que tiene los directorios ABC, DEF, GHI dentro de él. Quiero buscar un patrón 'writeText' en todos * .c en todos los directorios (es decir XYZ, XYZ/ABC, XYZ/DEF y XYZ/GHI) ¿Qué comando grep puedo usar?grep en todos los directorios

Además, si deseo buscar solo en XYZ, XYZ/ABC, XYZ/GHI y no XYZ/DEF, ¿qué comando grep puedo usar?

¡Gracias!

+1

Las banderas '--recursive' y' --include'/'--exclude' son probablemente lo que quiere – geoffspear

Respuesta

24
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ 
  • -R significa recursivo, por lo que voy a entrar en los subdirectorios del directorio que va a través de grepping
  • --include="*.c" significa "buscar los archivos que terminan en .c"
  • --exclude-dir={DEF} significa "excluye directorios llamados DEF. Si desea excluir varios directorios, haga esto: --exclude-dir={DEF,GBA,XYZ}
  • writeFile es el patrón en el que está greptando
  • /path/to/XYZ es la ruta al directorio por el que desea grep.

Tenga en cuenta que estos indicadores se aplican a GNU grep, podría ser diferente si está usando BSD/SysV/AIX grep. Si está utilizando Linux/GNU grep utils, debería estar bien.

+0

Gracias. ¡Esto funciona! – Romonov

3

Puede usar el siguiente comando para responder al menos la primera parte de su pregunta.

find . -name *.c | xargs grep "writeText" 
+1

consiguiendo este mensaje: find. -name * .c | xargs grep "writeText" encontrar: las rutas deben preceder a la expresión Uso: find [ruta ...] [expresión] – Romonov

+0

Funciono en mi máquina Ubuntu. Puedes intentar usar solo encontrar. -name * .c, y comparte el resultado. –

+0

Mismo mensaje. Mi sistema es redhat. – Romonov

-1

Esto funcionó para mí. Modifiqué un poco para mis necesidades. Estoy usando Macintosh OSX 10.8.3 desde la aplicación Terminal.

En lugar de "* .c" usé "util", esto es parte de cada nombre de archivo que quería buscar entre los muchos otros archivos que estaban en el directorio.

En mi situación, no necesitaba el "--exclude-dir" porque estaba buscando todos los subdirectorios debajo de mi ubicación actual.

En el writeFile utilicé (con comillas) "utilization =" o "request", que eran dos de las cadenas que quería encontrar en el archivo (s).

Luego utilicé un "." para indicar que quería comenzar mi búsqueda en el directorio actual.

A continuación, uso un> /[path]/[nombre de archivo.txt] para indicar que deseo que se agregue todo el resultado a un archivo de texto.

Gracias.

Cuestiones relacionadas