Bash: ¿hay alguna forma de buscar una cadena (o patrón) en su directorio actual? [duplicar]

Respuestas:

5

Respuesta simple:

grep -l string *

Enumerará todos los archivos en su directorio actual que contienen la cadena de cadena .

Y si desea buscar cadenas en todos los archivos en el directorio actual y en cualquier subdirectorio, use:

grep -rl string .

Detalles:
* coincidirá con todo en su carpeta actual, excepto los archivos que comienzan con., Teóricamente también coincidirá con los directorios, aunque generalmente no importa mucho. Si quieres ser muy exigente, puedes usar find como este:

find . -type f -maxdepth 1 -exec grep -i string {} /dev/null \;

Si desea buscar en la carpeta y subcarpetas actuales, deje -maxdepth 1 como:

find . -type f -exec grep -i string {} /dev/null \;

{} significa el nombre de archivo que coincide, pero para escuchar el NOMBRE del archivo también debe agregar al menos dos nombres de archivo, y mencionar / dev / null es el truco. Puede modificar esto como desee para obtener el resultado deseado. Debería darle una base para trabajar. :)

Mattias Ahnberg
fuente
simplemente agregando el modificador -R también imitará el comportamiento descrito anteriormente de find , si es necesario hacerlo pasando por subdireccionamientos recursivamente.
XXL
Sin embargo, -r y -R son lo mismo que grep.
Mattias Ahnberg
sí, por supuesto, es solo que has editado tu respuesta con el ejemplo recursivo antes de que logré publicar en el original que faltaba :)
XXL
1

Aquí hay algunas formas de hacerlo en el directorio actual y todos sus subdirectorios.

Si desea nombres de archivos donde se puede encontrar ese texto:

find . -type f -exec grep -l 'string' {} \; 

Si desea ver solo las líneas donde se encontró el texto:

find . -type f -exec grep 'string' {} \; 

Si desea ver los nombres de los archivos que se buscan y luego el contenido de las líneas cuando se encuentra algo:

find . -type f -print -exec grep 'string' {} \;

Por supuesto, esto se puede combinar aún más ...

Josip Medved
fuente
Debe ser -name '*', como nombres de archivos sin extensiones no existen (y, de hecho, son comunes en Unix).
Grawity
Para hacer coincidir los archivos, generalmente es mejor usarlo -type f, posiblemente en combinación con -name si desea hacer una selección más profunda basada en el nombre del archivo. Pero por lo general, el tipo f es suficiente para estas necesidades.
Mattias Ahnberg
No se especificó ningún filtro de nombre, por lo que lo eliminaría, pero use -type f como lo sugiere @MattiasAhnberg.
Usuario desconocido el