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. :)


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 ...


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.