command-line terminal grep command-line-interface ack

command line - Buscar archivos y nombres de archivos usando Silver Searcher



command-line terminal (4)

Encontré esta pregunta buscando la misma respuesta yo mismo. No parece que ag tenga alguna capacidad nativa para buscar nombres de archivos y directorios. Las respuestas anteriores de Zach Fogg y Jikku Jose funcionan a la vez, pero a la espera de find . puede ser muy lento si está trabajando en un directorio grande.

Recomiendo usar find directamente, que es mucho más rápido que pasarlo por ag :

Linux (versión GNU de find )

find -name [pattern]

OSX (versión BSD de find )

find [pattern]

Si necesita más ayuda para find , esta guía de Digital Ocean es bastante buena. Incluyo esto porque las páginas del manual para find son escandalosamente densas si solo quieres descubrir el uso básico.

Usando Silver Searcher, ¿cómo puedo buscar:

  1. Archivos (no binarios) con una palabra o patrón Y
  2. todos los nombres de archivo , con una palabra o patrón que incluya los nombres de archivos binarios.

Otras preferencias: le gustaría tener una búsqueda que no distinga entre mayúsculas y minúsculas y la búsqueda a través de archivos de puntos.

Intenté usar un alias sin mucha suerte:

alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"


Intenta agregar esto a tu archivo de alias. Probado con zsh pero debería funcionar con bash. El problema que encontró en su ejemplo es que los alias de bash no pueden tomar parámetros, por lo que primero debe definir una función para usar los parámetros y luego asignar su alias a esa función.

searchfunction() { echo $(ag -g $1 --hidden) echo $(ag --hidden -l $1) } alias search=searchfunction

Puede modificar este ejemplo para adaptarlo a su propósito de varias maneras, por ejemplo

  • agregue / elimine la -l dependiendo de si desea o no que los resultados de texto muestren la coincidencia del texto o solo el nombre del archivo
  • agregar encabezados para separar los resultados de texto y resultados de nombres de archivos
  • deduplique los resultados para tener en cuenta los archivos que coinciden con el nombre de archivo y el texto, etc.

[Edición: se eliminó la marca innecesaria --smart-case por el comentario de Pablo Bianchi]


Prueba esto:

find . | ag "/.*SEARCHTERM[^/]*$"

El comando find . listará todos los archivos.

ag "/.*SEARCHTERM[^/]*$" el resultado de eso al comando ag "/.*SEARCHTERM[^/]*$" , que coincide con SEARCHTERM si está en el nombre del archivo, y no solo en la ruta completa.


Según la página del manual de ag

-G --file-search-regex PATTERN Only search files whose names match PATTERN.

Puede usar la opción -G para realizar búsquedas en archivos que coincidan con un patrón.

Por lo tanto, para responder a su pregunta:

root@apache107:~/rpm-4.12.0.1# ag -G cpio.c size rpm2cpio.c 21: off_t payload_size; 73: /* Retrieve payload size and compression type. */ 76: payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);

el comando anterior busca el size palabra en todos los archivos que coinciden con el patrón cpio.c

Referencia:
página de manual de la versión ag 0.28.0

Nota 1:

Si está buscando una cadena en ciertos tipos de archivos, diga todo el código fuente de C, hay una función no documentada en ag para ayudarlo a restringir rápidamente las búsquedas a ciertos tipos de archivos.

Los siguientes comandos buscan foo en todos los archivos php:

find . -name /*.php -exec grep foo {} ag --php foo

Mientras find + grep busca todos los archivos .php , el --php en el comando ag busca las siguientes extensiones de archivo:

.php .phpt .php3 .php4 .php5 .phtml

Puede utilizar --cpp para los archivos de origen de C ++, --hh para los archivos .h , --js para JavaScript, etc. Puede encontrar una lista completa here