¿Cómo puedo grep de archivos ocultos?

96

Estoy buscando en un repositorio de Git y me gustaría incluir la .gitcarpeta.

grep no incluye esta carpeta si ejecuto

grep -r search *

¿Cuál sería un comando grep para incluir esta carpeta?

Steven Penny
fuente

Respuestas:

135

Consulte la solución al final de esta publicación como una mejor alternativa a lo que está haciendo.

Puede incluir explícitamente archivos ocultos (un directorio también es un archivo).

grep -r search * .*

El *coincidirá con todos los archivos excepto los ocultos y .*solo coincidirá con los archivos ocultos. Sin embargo, esto fallará si no hay archivos no ocultos o archivos ocultos en un directorio determinado. Por supuesto, podría agregar explícitamente en .gitlugar de .*.

Sin embargo, si simplemente desea buscar en un directorio determinado, hágalo así:

grep -r search .

El .coincidirá con la ruta actual, que incluirá archivos ocultos y no ocultos.

máscara de bits
fuente
1
El primer enfoque (grep -r search *. *) Funcionó para mí. El segundo enfoque (grep -r search.) No encontró la cadena. Encontré resultados similares al omitir "-r" y buscar solo en el directorio de nivel superior. Estoy usando GNU grep 2.6.3.
Alan
@Alan: Eso es raro. Yo uso esto con regularidad. ¿Lo probaste en el mismo directorio?
máscara de bits
27
el uso .*incluirá el directorio principal (porque ..coincide)
vea el
1
¿Es seguro generalizar sobre esta solución, ya que el comportamiento puede variar entre caparazones?
astletron
6
para la primera versión, debe agregar --exclude-dir = .. para evitar buscar en las carpetas principales
user762353
12

Me acabo de encontrar con este problema y, según la respuesta de @ bitmask, aquí está mi modificación simple para evitar el problema señalado por @sehe:

grep -r search_string * .[^.]*
loco
fuente
No obtengo ningún resultado al usar esto: sudo grep -r ANDROID_HOME * .[^.]*¿qué estoy haciendo mal aquí?
messerbill
@messerbill, ¿dónde está ejecutando la búsqueda?
loco
3

Quizás prefiera combinar "grep" con el comando "buscar" para obtener una solución completa como:

find . -exec grep -Hn search {} \;

Este comando buscará dentro de archivos o directorios ocultos la cadena de "búsqueda" y enumerará cualquier archivo que coincida con este formato de salida:

Ruta del archivo: Número de línea: línea con coincidencia

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Olvathar
fuente
2

Es posible que desee utilizar este enfoque, asumiendo que está buscando en el directorio actual (de lo contrario, reemplácelo con el directorio deseado):

find . -type f | xargs grep search

o si solo desea buscar en el nivel superior (que es más rápido de probar si los está probando):

find . -type f -maxdepth 1 | xargs grep search

ACTUALIZACIÓN: Modifiqué los ejemplos en respuesta a los comentarios de Scott. También agregué "-tipo f".

Alan
fuente
1
(1)  ~es el directorio de inicio del usuario. La pregunta no era sobre el directorio de inicio del usuario, por lo que la respuesta no debería mencionarse  ~. (2) En un  findcomando, -name '*'es un no-op (es decir, no sirve para nada).
Scott
1

Para buscar SOLO en todos los archivos y directorios ocultos de su ubicación actual:

find . -name ".*" -exec grep -rs search {} \;

SOLO todos los archivos ocultos:

find . -name ".*" -type f -exec grep -s search {} \;

SOLO todos los directorios ocultos:

find . -name ".*" -type d -exec grep -rs search {} \;
Tyler Christian
fuente
1

Todas las demás respuestas son mejores. Este podría ser fácil de recordar:

find . -type f | xargs grep search

Solo encuentra archivos (incluidos los ocultos) y greps cada archivo.

PrashantB
fuente
0

Para buscar solo dentro de una carpeta determinada, puede usar:

ls -al | grep " \."

Es un comando muy simple para listar y canalizar a grep.

Peter Mortensen
fuente
0

Además de la sugerencia de Tyler, aquí está el comando para grep todos los archivos y carpetas de forma recursiva, incluidos los archivos ocultos

find . -name "*.*" -exec grep -li 'search' {} \;
nikhilgoel1985
fuente
0

Para evitar que coincidan .y ..que no sean archivos ocultos, puede usar grepcon ls -Alike en este ejemplo:

ls -A | grep "^\."

^\. establece que el primer carácter debe ser .

La opción -Ao --almost-allexcluye los resultados .y, ..por lo tanto, solo los archivos y directorios ocultos coinciden.

mchid
fuente
0

También puede buscar tipos específicos de archivos ocultos, como archivos de directorio ocultos:

grep -r --include=*.directory "search-string"

Esto puede funcionar mejor que algunas de las otras opciones. Las otras opciones que funcionaron pueden ser demasiado lentas.

mYnDstrEAm
fuente