Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Guido Socher

Acerca del Autor : Ama a Linux porque es gratis y es divertido trabajar con la gente de la comunidad Linux de todo el mundo. Pasa tiempo con su novia, escuchando la BBC World Service, montando bicicleta por el campo y jugando con Linux.

Escribe al autor

Contenidos:
Buscando ficheros por nombre
Obteniendo una vista completa
Buscando ficheros por contenido

Busqueda de ficheros

[Illustration]

Resumen: Este artículo nos da una introducción sobre como buscar ficheros por nombre y por contenido.



Buscando ficheros por nombre

Probablemente puedes recordar este problema: Tenías algún tipo de fichero y no podías recordar donde lo pusiste.

Aquí es donde el comando find viene a ser útil. ¿Cómo usarlo? find viene, por supuesto, con un extenso man page pero veamos unos "casos típicos": Buscar un archivo llamado lostfile.txt, recorriendo el árbol de directorios comenzando en el directorio actual:

find . -name lostfile.txt -print

find acepta también wildcards. Recuerda colocar entre comillas los wildcards, de lo contrario el shell no los reconocerá como tales. Aquí un ejemplo:

find . -name "lost*" -print

Este comando puede ser un poco lento cuando necesites buscar en un árbol de directorios muy grande. Aquí el comando locate puede ayudar. Este realmente no busca directamente un archivo en el sistema de ficheros. Busca en una base de datos. Es bastante más rápido pero la base de datos podría estar desactualizada. En algunas distribuciones la base de datos localizada es actualizada cada noche pero puedes, por supuesto, correr el comando updatedb manualmente de vez en cuando para actualizarla. locate realiza búsquedas de subcadenas.

locate lostfile

Este localiza los ficheros lostfile.txt o mylostfile.txt, etc...

Hasta ahora estabamos buscando ficheros de los cuales teníamos una remota idea de sus nombres. Tal vez el nombre del archivo no era lostfile.txt sino lastfile.txt o leastfile.txt o lostfile.txt o Lostfile.txt o lostfile.text y no puedes recordar exactamente el nombre. ¿Cómo podrías encontrar el archivo aún? en este caso podrías usar una utilidad para encontrar ficheros que tolera fallas en la escritura del nombre llamada ftff (fault tolerant file find). Esta utilidad busca el archivo y permite un número de "errores en la escritura". Este comando encontraría los nombres mal escritos de los ficheros:

ftff lostfiles.txt

El número permitido de errores en la escritura del nombre depende del largo del mismo pero también puede establecerse con la opción -t. Para permitir un máximo de 2 errores y usar también un wildcard, sólo tipea:

ftff -t2 "lostfiles*"

ftff es un programa de mi autoria y forma parte de un paquete llamado whichman-1.4 que puede ser bajado de

sunsite.unc.edu/pub/ Linux/apps/doctools/whichman-1.4.tar.gz

Algunas veces te gustaría encontrar todos los ficheros en el árbol de directorios que no contengan cierta cadena. Por ejemplo todos los ficheros excepto .o y .c. Aquí están un par de posibilidades para hacerlo::

find . ! -name "*.o" ! -name "*.c" -print
find . -print | fgrep -v '.o' | fgrep -v '.c'
si tienes la versión gnu de find: find | fgrep -v '.o' | fgrep -v '.c'
find | egrep -v '\.[oc]'

Obteniendo una vista completa del sistema de ficheros

Algunas veces te agradaría tener una visión total del sistema de ficheros frente a ti. Por ejemplo: Tienes un nuevo CD y quisieras ver que es lo que tiene. Podrías usar solamente ls -R. Personalmente prefiero por fácil lectura uno de los siguientes: tree dibuja un diagrama de árbol (sunsite.unc.edu/pub/Linux/utils/file/ tree-1.2.tgz ).

tree
o con nombres largos de archivo: tree -fF

También está por supuesto, el viejo, pero buen find. La versión GNU de find, que viene usualmente con Linux, también tiene la posibilidad de cambiar el formato de impresión para imprimir, por ejemplo el tamaño del archivo con el nombre:

find . -ls
find . -print o con gnu find: find
find . -printf "%7s %p\n"

Hay también un pequeño programa en perl usando el comando ls que hace cosas similares. Se puede bajar de aquí: lsperl.gz. Puedes encontrar probablemente muchas más herramientas para ver ficheros pero ésta es, para la mayoría de los casos, suficiente.

Encontrando ficheros por contenido (buscando cadenas de texto en ficheros)

La utilidades standard para buscar cadenas de texto en ficheros son grep/egrep para la búsqueda de expresiones regulares y fgrep para buscar cadenas literales. Para buscar una expresión en todos los ficheros del directorio actual sólo tipea:

egrep -i "search expression" *

Para buscar cadenas en todos los ficheros de todo el árbol de directorios puedes combinar el comando find con otro comando de búsqueda de archivo, por ejemplo: egrep. Esto puede ser realizado de muchas formas:

egrep -i "expression" `find . -type f -print`
find . -type f -exec egrep -i "expression" /dev/null {} \;
find . -type f -print | xargs egrep -i "expression"

Si encuentras ésto díficil de recordar entonces puedes usar un pequeño shell script que puedes encontrar aquí grepfind.gz Este script también se asegura que caracteres no imprimibles sean removidos en caso de que ejecutes egrep en un archivo binario.

Un programa de búsqueda muy interesante es agrep. Este funciona básicamente como egrep pero realiza búsquedas que toleran errores en la escritura del nombre. De esta manera puedes también encontrar palabras mal escritas. Para buscar una expresión con un máximo de dos errores de escritura puedes usar:

agrep -i -2 "search exprission" *

El programa agrep puede ser bajado de sunsite sunsite.unc.edu/pub/Linux/util s/text/agrep-2.04.tar.Z o de su sitio original ftp://ftp.cs.arizona.edu/agrep/

También está glimpse. Esta es una poderosa utilidad de búsqueda. Utiliza un concepto similar a locate. Primero una base de datos necesita ser construida, para que la búsquedas sean rápidas. Para construir una búsqueda indexada del contenido de todos los ficheros empezando en el directorio actual:

glimpseindex .

Después de eso puedes buscar una cadena en todos los ficheros que fueron previamente indexados

glimpse -i -2 "search exprission"

glimpse también tolera errores de escritura (como agrep) y el -2 permite dos errores. glimpse está disponible en http://glimpse.cs.arizona.edu/


Hay muchas utilidades de búsqueda disponibles para Unix y Linux especialmente. Por lo tanto este artículo no puede estar completo. Si estas interesado en más trucos y utilidades como éstas echa un vistazo en los ficheros .lsm en http://sunsite.unc.edu/pub/Linux/utils

Pásala bien y feliz búsqueda.

Traducido por Ruben Sotillo

This website is maintained by Miguel Angel Sepulveda
© Guido Socher 1998
LinuxFocus 1998