Traté de buscar de forma recursiva un patrón en todos los archivos .c de la siguiente manera
> grep -lr search-pattern *.c
Pero obtuve esto como salida
> grep: *.c: No such file or directory
Cuando uso esto:
> grep -lr search-pattern *
Tengo mucho. c archivos en los directorios con el patrón.
¿Qué hay de malo con la expresión anterior?
--include=GLOB
opción. En combinación con la opción recursiva, esto es muy poderoso y no requierefind
. ¡Agradable!.
sirve el final del comando.El
*.c
patrón es evaluado por su shell. Se aplica al directorio actual, tal como lo usaríals *.c
.Creo que lo que quieres es encontrar todos los archivos que coincidan con el
*.c
patrón (recursivamente) ygrep
buscarte en él. Aquí hay una manera de hacer eso:Se utiliza
xargs
para agregar los resultados de búsqueda porfind
.Alternativamente, use la
-exec
opción para buscar, por ejemplo:Además, no estoy seguro de si realmente quieres la
-l
opcióngrep
. Se detendrá en el primer partido:fuente
find/xargs
sintaxis se rompe en los nombres de archivo que contienen espacios. La-L
opción degrep
detenerse en la primera coincidencia de cada archivo y continuar con el siguiente archivo: si uno solo quiere ver si el patrón está contenido al menos una vez en cada archivo dado, es más rápido.-print0
opción yxargs --null
.Sé que este es un hilo bastante antiguo, pero como tenía la misma pregunta, quiero compartir mi forma preferida de lograr lo mismo, en una forma mucho más corta.
fuente