¿Cómo puedo buscar de forma recursiva todos los directorios y subdirectorios?
¿Cómo puedo recursivamente grep
todos los directorios y subdirectorios?
find . | xargs grep "texthere" *
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 ggrep
comando.
Si conoce la extensión o el patrón del archivo que desea, otro método es utilizar --include
la 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.
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 -n
disminuyen 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 recurse
opció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-match
opció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;
...
También:
find ./ -type f -print0 | xargs -0 grep "foo"
pero grep -r
es una mejor respuesta.