¿Cómo puedo buscar de forma recursiva todos los directorios y subdirectorios?

Resuelto wpiri asked hace 14 años • 27 respuestas

¿Cómo puedo recursivamente greptodos los directorios y subdirectorios?

find . | xargs grep "texthere" *
wpiri avatar Jan 01 '10 12:01 wpiri
Aceptado
grep -r "texthere" .

El primer parámetro representa la expresión regular a buscar, mientras que el segundo representa el directorio en el que se debe buscar. En este caso, .significa el directorio actual.

Nota: Esto funciona para GNU grep, y en algunas plataformas como Solaris debes usar GNU grep específicamente en lugar de la implementación heredada. Para Solaris este es el ggrepcomando.

Vinko Vrsalovic avatar Jan 01 '2010 05:01 Vinko Vrsalovic

Si conoce la extensión o el patrón del archivo que desea, otro método es utilizar --includela opción:

grep -r --include "*.txt" texthere .

También puede mencionar archivos para excluir con --exclude.

Ag

Si busca código con frecuencia, Ag (The Silver Searcher) es una alternativa mucho más rápida a grep, que está personalizada para buscar código. Por ejemplo, es recursivo de forma predeterminada e ignora automáticamente los archivos y directorios enumerados en .gitignore, por lo que no tiene que seguir pasando las mismas engorrosas opciones de exclusión para grep o find.

christangrant avatar Dec 30 '2011 22:12 christangrant

Ahora siempre uso (incluso en Windows con GoW - Gnu en Windows ):

grep --include="*.xxx" -nRHI "my Text to grep" *

(Como señaló Kronen en los comentarios , puede agregar 2>/dev/null salidas para anular el permiso denegado)

Eso incluye las siguientes opciones:

--include=PATTERN

Recurre en directorios solo buscando coincidencias de archivos PATTERN.

-n, --line-number

Prefije cada línea de salida con el número de línea dentro de su archivo de entrada.

(Nota: phuclv agrega comentarios que -ndisminuyen mucho el rendimiento , por lo que es posible que desee omitir esa opción)

-R, -r, --recursive

Lea todos los archivos de cada directorio de forma recursiva; esto es equivalente a la -d recurseopción.

-H, --with-filename

Imprime el nombre del archivo para cada partido.

-I     

Procese un archivo binario como si no contuviera datos coincidentes;
esto es equivalente a la --binary-files=without-matchopción.

Y puedo agregar ' i' ( -nRHIi), si quiero resultados que no distingan entre mayúsculas y minúsculas.

Puedo conseguir:

/home/vonc/gitpoc/passenger/gitlist/github #grep --include="*.php" -nRHI "hidden" *
src/GitList/Application.php:43:            'git.hidden'      => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
src/GitList/Provider/GitServiceProvider.php:21:            $options['hidden'] = $app['git.hidden'];
tests/InterfaceTest.php:32:        $options['hidden'] = array(self::$tmpdir . '/hiddenrepo');
vendor/klaussilveira/gitter/lib/Gitter/Client.php:20:    protected $hidden;
vendor/klaussilveira/gitter/lib/Gitter/Client.php:170:     * Get hidden repository list
vendor/klaussilveira/gitter/lib/Gitter/Client.php:176:        return $this->hidden;
...
VonC avatar Feb 14 '2013 09:02 VonC

También:

find ./ -type f -print0 | xargs -0 grep "foo"

pero grep -res una mejor respuesta.

 avatar Jan 01 '2010 05:01