Sirviendo información sobre Linux desde 1998

Buscando ficheros

Autor: Guido Shocher, LinuxFocus
Traducido por Ruben Sotillo
Copyright pertenece al autor

Buscando ficheros por nombres

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. 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 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 ftp://sunsite.unc.edu/pub/Linux/utils

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

muy agradecido

Necesitaba encontrar un fichero que contuviera unos DNIs,
he ido a la carpeta de listados,
egrep "num_dni" *
voila!!,
pués eso muchas gracias.

guardo un enlace a vuestra web.

Muchas gracias

Prove este comando en unos archios de CDRs y funciono....muchas gracias por compartir esta información