Buscando ficheros

 

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

 

 

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 solamentels -R. Personalmente prefiero por fácil lectura uno de los siguientes: tree dibuja un diagrama de árbol 

 

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"

 

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"

 

Deja una respuesta