Hace 4 años

Buscar archivos y textos en Linux

Seguro que en alguna ocasión has necesitado encontrar un archivo del que solo recuerdas que contenía algún texto, o simplemente has necesitado encontrar un archivo que no recordaste donde se guardó. En Linux tenemos tres comandos con los que podemos hacer una búsqueda asombrosamente rápida, tanto para encontrar archivos por su nombre, como para encontrar archivos por un texto que los contenga.

Buscar textos

El comando grep nos permite buscar un texto dentro de un archivo o en todos los que hay en una carpeta o incluso en todas las carpetas de forma recursiva. Para detener la ejecución de este comando y de cualquier otro, basta con pulsar CTRL+c.

grep

grep [Opciones] “TextoQueBusco” [Ruta][Archivo]

Opciones

-c
Muestra el número de líneas que coinciden.
-e
Nos permite especificar varios patrones de búsqueda.
-i
No diferencia entre mayúsculas y minúsculas.
-l
Muestra sólo los nombres de los archivos que encuentra.
-o
Muestra sólo la parte de la línea que coincide con el patrón.
-r
Busca recursivamente dentro de todos los subdirectorios del directorio actual.
-v
Nos muestra las líneas que no coinciden con el patrón buscado.

Ejemplos

grep “Texto” *
Busca el texto en todos los archivos de la carpeta
grep “Texto” Archivo
Busca el texto en el Archivo.
grep “Texto” Ruta/Archivo
Busca el texto en Ruta/Archivo.
grep -r “Texto” Ruta/
Busca el texto en todos los archivos de la ruta y subcarpetas.
grep -r -l “Texto” *
Muestra solo los nombres de los archivos que contienen el texto.
grep -r -e “Texto1” -e “Texto2” *
Busca varios textos a la vez.

Buscar archivos

Para encontrar archivos de forma gráfica podemos usar el explorador de archivos de nuestra distro, como Nautilus en Ubuntu. El atajo de teclado para buscar es CTRL+f. Pero nada tan rápido como usar la terminal con los comandos Locate y Find.

Locate

Las búsquedas con Locate prácticamente son instantáneas debido a que las realiza en una base de datos y no en el disco duro como hace Find. Para asegurarnos de que la base de datos de la lista de archivos está actualizada, es recomendable actualizarla. El NombreArchivo puede ser una parte del nombre que ha de buscar.

sudo updatedb
Actualiza la base de datos.
locate NombreArchivo
Muestra todos los que encuentra.

Find

Al contrario que Locate, Find es mucho más potente por tener muchas opciones de búsqueda, que además se pueden combinar gracias a las funciones lógicas y también porque podemos decirle que hacer con los resultados de la misma, usando otros comandos de Linux. Para este último caso los resultados de la búsqueda se representa con dos llaves {}. También es posible usar el * como comodín, para encontrar archivos que contengan parte de una palabra. El punto . indica la carpeta en la que estamos.

find [Ruta] [Opciones] [Acciones]

Opciones

-not -or -and
Funciones lógicas de negación, suma o producto.
-name Patrón
Busca según el patrón Archivo.EXTensión.
-iname Patrón
Como -name pero sin tener en cuenta las mayúsculas ni minúsculas.
-type [fdl]
Busca archivos (f), directorios (d), enlaces simbólicos (l).
-path Patrón
Busca según el patrón Ruta/Archivo.EXTensión.
-ipath Patrón
Como -path pero sin tener en cuenta las mayúsculas ni minúsculas.
-empty
Busca ficheros vacíos.
-size ±N[bkMG]
Busca archivos por tamaño en bytes, kilobytes, Megabytes o Gigabytes
-user Usuario
Busca archivos de un usuario.
-group Grupo
Busca archivos de un grupo.
-executable
Busca archivos con el flag ejecutable.
-atime N
Último acceso N*24 horas atrás.
-ctime N
Último cambio de estado N*24 horas atrás.
-mtime N
Última modificación N*24 horas atrás.
-amin N
Último acceso N minutos atrás.
-cmin N
Último cambio de estado N minutos atrás.
-mmin N
Última modificación N minutos atrás.

Acciones

-exec Comando {} \;
Ejecuta el comando con los {resultados} de la búsqueda.
-delete
Borra los archivos encontrados.
-ls
Lista los archivos encontrados en formato ls

Ejemplos

find -name *.png
Busca en la carpeta actual todos los archivos con la extensión .png
find -type f -name Gastos*
Busca en la carpeta actual solo archivos o carpetas que empiecen por Gastos
find Escritorio/ -name *plugin*
Busca en la carpeta Escritorio todos los archivos o carpetas que contengan plugin
find Documentos/ -name Gastos* -or -iname Nomina*
Busca en la carpeta Documentos los archivos que empiecen por Gastos, gastos o Nomina.
find -type f -name wordpress* -and -not -name *.php
Busca los archivos que empiecen por WordPress y que no sean .php
find Documentos/ -empty
Busca archivos vacíos en la carpeta Documentos.
find Música/ -size +1M -size -20M
Busca archivos entre 1 y 20 Megabytes.
find . -atime 0
Busca archivos que han sido accedidos en las últimas 24 horas.
find . -ctime 1
Busca archivos que han sido modificados de estado entre las últimas 24 y 48 horas.
find . -mtime +1
Busca archivos que han sido modificados hace más de 48 horas.
find . -mmin +2 -mmin -5
Busca archivos que han sido modificados entre mas de 2 minutos y menos de 5 minutos.
find -user jhosue -or -user www-data
Busca archivos del usuario jhosue o www-data.
find -type f -name Thumbs.db -delete
Busca los archivos Thumbs.db y los borra.
find -size +1M -iname *.AVI >Escritorio/MisVideos
Busca archivos de vídeo mayores de 1Mb lo redirige al archivo MisVídeos en la carpeta Escritorio.
find Escritorio -name *.pdf -exec cp {} “Imágenes/” \;
Copia todos los archivos.pdf del escritorio a la carpeta Imágenes.
find /var/backup -mtime +20 -type d -exec rm -f {} \;
Borra todos los subdirectorios de la carpeta /var/backup que tengan una antigüedad mayor de 20 días.
find -name “*.c” -exec sed -i -r ‘s/iNumerob/iNumeroPrimo/’ {} \;
Busca y reemplaza la palabra Numero por NumeroPrimo

Localizar ejecutable, código fuente y manual

Con man y el nombre del programa podremos ver el manual del mismo. Pero con whereis podremos localizar el ejecutable en nuestro disco duro, junto a su código fuente y su manual. Si nos conformamos con solo la localización podremos usar which.

whereis / which ejecutable

Ejemplos

man
grep
whereis
nautilus
which
gedit
Ubuntu/Linux
2352
2

2 comentarios

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  • Richard dice:

    Buenísimo el instructivo y bien didáctico. Con repecto a grep me viene perfecto para lo que estamos tratando de resolver en el Concejo Municipal de Bariloche pues nuestros usuarios usan mucho la búsqueda de archivos a partir de su texto. El inconveniente con el que me sigo encontrando es que busca o mejor dicho no busca archivos odt, o sea libre office, y por otro lado no me busca en archivos recientemente creados o modificados.
    Supongo que tiene que ver con algo de actualización o indexación pero probé reiniciar la máquina y no he visto avances.

    Por otro lado probé el comando updatedb y no me lo acepta. Creo entender que esto estaba asociado con los otros comandos para búsqueda. Estos también los probé y creo no equivocarme si entiendo que sólo sirve para buscar archivos en base a su nombre o parte de tal o su extensión

    Richard Gavini
    gavinirichar@gmail.com

    • Jhosue dice:

      Gracias, me alegra saber que son de utilidad.

      Estos comandos son a nivel de máquina, por lo que le da lo mismo de que tipo y formato es. Lo que si puede suceder es que los documentos de LibreOffice son documentos escritos en código HTML. Lo que puede hacer que no encuentres lo que buscas porque no se guardan en formato texto. Como ejemplo los acentos y caracteres especiales que tiene sus propios códigos.

      El que no te encuentre un documento recién creado puede ser porque no está en la ruta que le indiques. Como consejo no dejes que lo guarde dónde el quiera, dile tu en que carpeta lo quieres. Por ejemplo en Documentos, Escritorio, o dónde quieras.

      Si uno de los comandos no lo acepta, puede ser porque no esté instalado. Para instalarlo te recomiendo que uses synaptic.