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...