bash – Encontrar archivos que contienen una determinada cadena usando find (1) y grep (1)

Pregunta:

find . -type f -print -exec cat {} \; | grep some string

El comando anterior no imprime la ruta del archivo.

Estoy usando: Ubuntu, bash 4 .

Respuesta:

Eso es porque está alimentando a grep un flujo de texto que simplemente contiene nombres de archivo. Dado que no proporcionó nombres de archivo como argumentos para grep, no se puede esperar que deduzca de qué archivo proviene una línea coincidente. Utilice xargs :

find . -type f -print | xargs grep "some string"

Dado que tiene GNU find / xargs, esta es una forma más segura para que xargs lea nombres de archivos:

find . -type f -print0 | xargs -0 grep "some string"

Si solo desea los nombres de archivo que tienen una línea coincidente sin mostrar la línea coincidente:

find . -type f -print0 | xargs -0 grep -l "some string"

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım