GNU/Linux >> Tutoriales Linux >  >> Linux

¿Alternativas más rápidas para encontrar y localizar?

Buscar archivos fuente en un proyecto

Utilice un comando más simple

En general, es probable que la fuente de un proyecto esté en un solo lugar, tal vez en algunos subdirectorios anidados en no más de dos o tres de profundidad, por lo que puede usar un comando (posiblemente) más rápido como

(cd /path/to/project; ls *.c */*.c */*/*.c)

Hacer uso de los metadatos del proyecto

En un proyecto C, normalmente tendría un Makefile. En otros proyectos puede que tengas algo similar. Estas pueden ser una forma rápida de extraer una lista de archivos (y sus ubicaciones), escribir un script que haga uso de esta información para localizar archivos. Tengo un script de "fuentes" para poder escribir comandos como grep variable $(sources programname) .

Acelerar la búsqueda

Buscar menos lugares, en lugar de find / … usa find /path/to/project … donde sea posible. Simplificar los criterios de selección tanto como sea posible. Use canalizaciones para diferir algunos criterios de selección si eso es más eficiente.

Además, puede limitar la profundidad de búsqueda. Para mí, esto mejora mucho la velocidad de 'buscar'. Puede usar el interruptor -max depth. Por ejemplo '-max depth 5'

Acelerar la localización

Asegúrese de que esté indexando las ubicaciones que le interesan. Lea la página de manual y utilice las opciones que sean apropiadas para su tarea.

   -U <dir>
          Create slocate database starting at path <dir>.

   -d <path>
          --database=<path> Specifies the path of databases to search  in.


   -l <level>
          Security  level.   0  turns  security checks off. This will make
          searchs faster.   1  turns  security  checks  on.  This  is  the
          default.

Elimine la necesidad de buscar

Tal vez estás buscando porque has olvidado dónde está algo o no te lo dijeron. En el primer caso, escribir notas (documentación), en el segundo, ¿preguntar? Las convenciones, los estándares y la consistencia pueden ayudar mucho.


Utilicé la parte de "acelerar la localización" de la respuesta de RedGrittyBrick. Creé una base de datos más pequeña:

updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"

luego señaló locate en eso:locate -d /home/benhsu/ben.db


Una táctica que utilizo es aplicar el -maxdepth opción con find :

find -maxdepth 1 -iname "*target*"

Repite con profundidades crecientes hasta que encuentres lo que buscas o te canses de buscar. Es probable que las primeras iteraciones regresen instantáneamente.

Esto garantiza que no pierda el tiempo mirando a través de las profundidades de los subárboles masivos cuando es más probable que lo que está buscando esté cerca de la base de la jerarquía.

Aquí hay un script de ejemplo para automatizar este proceso (Ctrl-C cuando vea lo que quiere):

(
TARGET="*target*"
for i in $(seq 1 9) ; do
   echo "=== search depth: $i"
   find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)

Tenga en cuenta que la redundancia inherente involucrada (cada paso tendrá que atravesar las carpetas procesadas en los pasos anteriores) se optimizará en gran medida a través del almacenamiento en caché del disco.

¿Por qué no find ¿Tiene este orden de búsqueda como una función integrada? Tal vez porque sería complicado/imposible de implementar si asumiera que el recorrido redundante era inaceptable. La existencia del -depth opción insinúa la posibilidad, pero por desgracia...


Linux
  1. Cómo buscar y eliminar directorios recursivamente en Linux

  2. ¿Búsqueda sin distinción entre mayúsculas y minúsculas de nombres de archivos duplicados?

  3. ¿Encontrar patrón y mover?

  4. ¿Cómo buscar archivos por tamaño y extensión?

  5. ¿Usar el comando Grep y localizar?

Maneras de usar el comando 'buscar' para buscar directorios de manera más eficiente

Cómo usar los comandos de búsqueda y localización en Linux:una guía para principiantes

Cómo encontrar un archivo en Linux

¿Alternativas de Pgrep y Pkill en Mac Os X?

Buscar comando en Linux/UNIX

¿Cuál es la diferencia entre 'localizar' y 'buscar' en Linux?