¿Hay alguna manera de aumentar la velocidad de 'encontrar'

15

Me pregunto si hay una manera de aumentar la findvelocidad en la terminal, no tiene sentido que el uso de internet google para buscar tenga una mejor velocidad que hacer una búsqueda local de cadenas o simplemente nombres de archivos.

Me pregunto si hay una manera de tener una base de indexación local, una vez construida, en el futuro, el comando find podría ser súper rápido.

¿O alguna otra sugerencia?

¡Gracias!

Daniel
fuente
¿Puedes editar tu publicación con tu sistema operativo y / o distribución?
Jodie C

Respuestas:

15

Intenta usarlo locate, debe hacer lo que quieras.

Wojtek Rzepala
fuente
13
Por lo general, es una buena idea dar un poco más de respuesta. Como mencionar de qué paquete locateproviene (generalmente slocate), y usar updatedbpara reconstruir la base de datos. :-)
Patrick
1
Esto no funciona para particiones con indexación desactivada. Por ejemplo, las particiones NTFS sufren un mal rendimiento si la indexación está habilitada, por lo tanto, localizar no funcionará para aquellos "como debería".
ojrask
9

Depende mucho de cuál sea su criterio de búsqueda.

Si busca nombres de archivo o patrones de nombre de archivo, localizar es mucho más rápido, pero no es adecuado para archivos recién generados, ya que el índice utilizado normalmente se actualiza solo una vez al día. Pero si puedes usarlo, es súper rápido.

Pero con find puede buscar el tamaño del archivo, la antigüedad del archivo y otras cosas, que no se pueden buscar por localizar.

Si sabe dónde buscar, puede usar la ruta para delimitar el alcance de búsqueda:

find /some/path -size -10M -size +2M -mtime -365 ...

solo buscaría archivos de 2 a 10 M, máximo 1 año de antigüedad en / some / path.

Se pueden buscar programas, disponibles en la ruta, mediante los cuales, ayuda, lib y archivos de configuración con whereis. Ejemplos:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz
usuario desconocido
fuente
7

Utilizar locate

¡La razón es que locateutiliza una base de datos de todos los directorios y archivos existentes que ya se han creado tal como lo imaginó!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

En un intervalo establecido (y variable), un trabajo que se ejecuta escanea el sistema de archivos y luego crea una base de datos con él. Es entonces esta base de datos (ubicada b), con sus índices apropiados locatecontra los que va el comando en lugar de escanear a través de su disco duro en ese punto.

Entonces, lo bueno es que es muy rápido en comparación con un escaneo de disco duro. La desventaja es que la base de datos de localización (ubicada b) no está 'en vivo', por lo que solo se puede usar para archivos que existían 'a partir del' último escaneo.

Para actualizar ubicaciónb ahora ejecute updatedb(o sudo updatedbsi es necesario)

Por cierto, acabo de ejecutar sudo updatedblocalmente y me tomó 3 1/2 segundos. Tengo 31,000 archivos.

Michael Durrant
fuente
1

Como otros han señalado, localizar puede ser una mejor herramienta para un buscador más simple.

Sin embargo, para búsquedas más complejas, probablemente esté atascado con find.

Una forma de acelerar la búsqueda es reducir en qué directorio están sus archivos en lugar de buscar en todo el directorio raíz.

bigdaveyl
fuente
0

para una sola operación de búsqueda; No encontré ninguna aceleración; a menos que intente limitar la búsqueda utilizando las findopciones.

Sin embargo; si desea realizar varias findoperaciones en el mismo conjunto de archivos ; Obtuve una aceleración significativa al llenar un archivo temporal con todos los nombres de archivo y usarlos grep. Por supuesto, esto no tiene en cuenta los archivos que se agregan o eliminan.

Chris Maes
fuente