Buscar archivos find y locate en Linux
30 03 2008
En Linux tenemos dos opciones si queremos buscar archivos en nuestros discos. Difieren en que son conceptos totalmente distintos que a su vez cumplen necesidades distintas. En primer lugar, find es el comando que se usa para buscar normalmente en el sistema de ficheros, y lo examina cada vez que queremos hacer una búsqueda.
El comando locate se complementa con el comando updatedb. Este último comando, cuando lo ejecutamos (sin opciones ni argumentos), crea una especie de “base de datos” de todos los ficheros y directorios del sistema. De este modo, cuando queremos buscar algo con locate, simplemente este programa busca en esta base de datos, lo cual es mucho más rápido que buscar en el sistema de archivos directamente. Obvimanete esto tiene un inconveniente; si no actualizamos esta base de datos con updatedb, la información que nos dará locate no será cierta.
Uso de find
El uso más común de este comando es el siguiente:
# find
El primer argumento (directorio) es el directorio desde el que queremos que se busque (la búsqueda es recursiva por defecto, buscará también en todos los directorios que haya por debajo), la opción (-name) es el modo de búsqueda (en este caso por nombre), y el tercer argumento (en este caso nombre) son los criterios de búsqueda. Algunos ejemplos:
# find /usr -name mozilla
/usr/bin/mozilla
/usr/lib/mozilla
# find /usr -name '*.so'
[… casi todas las librerías del sistema …]
# find / -name '*gtk*'
[… todos los ficheros cuyo nombre contenga “gtk”…]
# find / -size +3000k
[… todos los ficheros de tamaño >= 3000 KB …]
Nota que para poder usar los wildcards que conocemos, simplemente debes encerrar el criterio entre comillas simples. Se puede buscar por criterios de muchísimos tipos, para más detalles, mira la página man. Recuerda que puedes detener la búsqueda igual que detenemos cualquier otro comando con Control+C, y redirigir la salida como también hemos aprendido; find puede ser muy útil en tus scripts.
Cuando siendo usuarios normales busquemos ficheros fuera de nuestro directorio personal, se nos mostrarán algunos mensajes de error porque habrá directorios a los que no tendremos permiso para entrar a buscar (p.e. /root). Estos mensajes de error nos despistarán a la hora de interpretar la salida, así que podemos enviar stderr a /dev/null (ya sabes, find … 2>/dev/null).
Uso de locate
En primer lugar, ejecutaremos el comando updatedb para actualizar la base de datos. Es una buena idea poner este comando en cron como veremos posteriormente para que se ejecute automáticamente todos los días a una hora en la que el sistema no tenga mucha carga. Esto nos permitirá agilizar nuestras búsquedas.
A continuación, el uso de locate no es nada del otro mundo. Además, es mucho menos flexible que find (lo cual es perfectamente comprensible una vez que nos han explicado su forma de funcionar). locate sólo sirve para buscar ficheros por nombre, y en todo el sistema de archivos. Ejemplos:
# locate so
[… muuucha salida …]
# locate '*.so'
[… las librerías del sistema …]
La similitud con find es que los criterios con wildcards deben ser entrecomillados con comillas simples. Las diferencias son: no nos permite especificar directorio, busca en toda la ruta al fichero (no sólo en el nombre del fichero), y además, si le pasamos un criterio sin wildcards, devolverá todos los nombres de fichero cuya ruta completa contenta ese criterio (nótese en el primer comando de ejemplo), a diferencia de find que sólo devolvería los ficheros con ese nombre exacto.
Fuente: http://www.zonasiete.org/manual/ch09s05.html







