Cómo encontrar archivos con cierto texto en la Terminal

168

Me gustaría encontrar todos los archivos que contienen una determinada cadena de texto. ¿Cómo harías eso en la Terminal?

Svish
fuente
Sin embargo, si desea un resultado rápido, use Spotlight. Además, si desea encontrar archivos que no necesariamente almacenan texto directamente dentro del archivo, como PDF u ODF.
Joey
Un buen consejo, pero en mi caso no estoy seguro de que los archivos estén indexados ya que están en controladores de red. Y también son archivos xml que pertenecen a un programa en particular.
Svish
Eche un vistazo a unix.stackexchange.com/a/37932/213832 esta solución funciona bien
boyd4715

Respuestas:

280
grep -r 'text goes here' path_goes_here
Ignacio Vazquez-Abrams
fuente
1
Sugeriría un man greppara descubrir todas las maravillosas opciones de grep
Ludovic Kuty
Esto enumera todos los archivos que existen en la ruta y agrega: No such file or directory Estoy tratando de obtener solo la lista de ocurrencias de texto. ¿Cómo podemos obtener esa lista?
CP3O
77
Entendido: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O
Pero esto devuelve el contenido de los archivos coincidentes, no los detalles del archivo (nombre, ruta). La sugerencia de @ CP3O funciona.
geotheory
28

usar foco

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

no te olvides de mirar:

man mdfind
user46046
fuente
2
¿Funcionará para archivos que Spotlight no indexa (es decir, archivos dentro de carpetas ocultas, archivos de configuración del sistema, etc.)?
Peter Berg
Grep no parece analizar archivos .xlsx, pero esto funcionó bien. Otro ejemplo fácil: mdfind -onlyin. "searchtext"
FvD
11
  1. A través de Ack

brew install ack ack "text goes here"

  1. A través de encontrar

find . |grep "text goes here"

  1. A través de grep

grep -RnslI "text goes here"

Anant Gupta
fuente
4

Puede elegir uno de los siguientes, según sus gustos y necesidades. Suponiendo que necesita buscar archivos que contienen texto - "asíncrono", recursivamente en el directorio actual, puede hacerlo de una de las formas siguientes:

Usando grep ingrese la descripción de la imagen aquí

Usando ack ingrese la descripción de la imagen aquí

karthiks
fuente
2

La respuesta de Ignacio es excelente y me ayudó a encontrar los archivos que contienen cierto texto. El único problema al que me enfrentaba era que, al ejecutar este comando, se enumerarían todos los archivos, incluido uno en el que el patrón no aparecía.

No such file or directory Esto es lo que veo junto a los archivos que no contienen el patrón.

Si, en cambio, agrega -sal comando, como en grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sse utiliza, solo le mostrará qué archivos contienen el patrón.

Del mismo modo si grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sSe utiliza el comando, imprime el archivo más el número de línea y la aparición del patrón.

Por favor corríjame si mi comprensión es incorrecta.

Referencia: ¿Cómo puedo hacer que grep no imprima los errores 'No existe tal archivo o directorio'?

CP3O
fuente
Otra forma de evitar esos molestos No errores de archivo , es canalizar stderr a nulo. grep ... 2>/dev/null. Esta solución funciona para la mayoría de los programas, ya que informan mensajes de error en la secuencia stderr, no stdout. He usado esta solución muchas veces find, ya que dirá Permiso denegado para muchos archivos.
jpaugh
(1) Si No such file or directoryrecibe mensajes de archivos que existen, está haciendo algo mal o su sistema está dañado. (2) ¿Qué [PATH OF PARENT]tiene que ver con algo?
G-Man el
@ G-Man Edité la respuesta para mostrar [PATH OF DIRECTORY]solo en caso de que alguien desconocido quisiera saber por qué lo había puesto./
CP3O
@ G-Man Estoy usando una Mac, no Ubuntu, no estoy seguro de cómo se rompería mi sistema, todavía no he hecho nada al respecto.
CP3O