Categorías Linux

Cómo buscar con el comando Find en Linux

Vamos a ver cómo utilizar el comando Find en Linux para buscar en Linux.

 

El comando find es un comando con el que podemos buscar ficheros y directorios en Linux.

Vamos a ver muchos ejemplos del comando find linux, junto con las opciones que ofrece para realizar diferentes búsquedas.

 

¿Cómo funciona el comando find?

 
El comando find busca a tiempo real en directorios, y no es tan rápido como el comando locate, pero no tendrá problemas asociados a una base de datos (locate es más rápido por que no busca a tiempo real sino en su base de datos, pero si la base de datos se corrompe, locate quedará inutilizado hasta que regeneremos la base de datos).

 

Índice de Contenidos:

 

 

 

 

Sintaxis del comando find en Linux

 
Como primer argumento, el comando find espera  un directorio donde comenzar a buscar.
 

Así funciona el comando find:

find donde qué_queremos_buscar

 

Si buscamos un nombre exacto y no existe, no encontrará nada. Pero si usamos comodines, poniendo una parte del nombre del archivo, encontrará lo que buscamos.
 

Por ejemplo, listamos el contenido del directorio Descargas y vemos que tenemos estos archivos:


 

Así que vamos a ver unos ejemplos usando este directorio.

 

A continuación vamos a buscar un archivo llamado “archivo“:

find Descargas/ -name archivo

 

Como no existe un archivo con ese nombre exacto, find no devuelve ningún resultado:

 

 

Pero si usamos el comodín, podemos facilitar al comando find la búsqueda. Así le decimos que busque los archivos que comienzen por ‘archivo‘ (usando la comilla simple) :

 

 

El error permiso denegado” al buscar con find en Linux

 
Si buscamos en la raíz del sistema (en /) recibiremos el mensaje: “Permiso denegado” en multitud de archivos.
 

Para solucionarlo, enviaremos la salida de standard error  (2) a /dev/null (el agujero negro de Linux que se traga todo):

 

2>/dev/null
 
De esta forma:

sudo find / -type d -iname descargas -ls 2>/dev/null

 

 

 

OPCIONES DEL COMANDO FIND

 

El comando find ofrece una gran cantidad de opciones y parámetros para afinas las búsquedas de archivos y directorios en Linux. Si especificamos varios criterios, deberán cumplirse todos para que find encuentre el archivo deseado.

 

Buscar archivos por nombre

 

  • La opción -name para buscar por nombre

Buscamos el archivo de nombre “archivo1.txt

find . -name archivo1.txt

o

find . -name 'archivo*'

 

Si usamos el comodín, podemos facilitar al comando “find” la búsqueda. Así le decimos que busque todos los archivos que comienzen por ‘archivo’ (usando la comilla simple) :


 

 

Mostrar todos los archivos del directorio actual y los subdirectorios

 
Podemos usar estas 3 opciones :

  • el comando find sin parámetros (busca y muestra los archivos del directorio actual y los subdirectorios):
find

 

  • el comando find apuntando al directorio actual:
find .

 

  • el comando find apuntando al directorio actual y con el parámetro -print (imprime el nombre completo de los archivos):
find . -print

 

 

Buscar directorios con find

 
Usamos el parámetro -type d, diciendo así a find que busque ficheros del tipo “d“, que son directorios.

find / -type d -name "apt"

 

Un detalle importante es que al buscar en root (/) debemos hacerlo con privilegios de super usuario:

sudo find / -type d -name "apt"

 

 

Mostrar de forma detallada la lista de archivos y directorios

 

Podemos hacer que find muestre de forma detallada los resultados de la búsqueda, añadiendo al final -ls

find $HOME -type d -name Descargas -ls

 

 

 

Buscar directorios por nombre

 
Por ejemplo queremos buscar el directorio “Descargas“:

find $HOME -type d -name Descargas

 


 

 

Buscar archivos por tipo de archivo (extensión)

 

Buscamos los ficheros con extensión “.txt

find . -type f -name '*.txt'


 

 

Realizar búsquedas no sensitivas (sin tener en cuenta que las letras sean mayúsculas o minúsculas)

 

Usaremos el parámetro -iname

find / -type d -iname "apt" -ls

 


 

 

Buscar archivos con ciertos permisos

 

Podemos buscar archivos según sus permisos con el parámetro -perm y la máscara de permisos.

 

Así, buscamos los archivos que tienen permisos 0755

find Descargas/ -type f -perm 0755 -print

 

Y los enlaces con permisos 0777:

find Descargas/ -type l -perm 0777 -print

 


 

 

Buscar archivos con permisos de solo lectura

 
Podemos usar el comando find para buscar archivos que tengan permisos de solo lectura.
 
En este caso buscamos los archivos de solo lectura para el usuario propietario:

sudo find -perm /u=r

 

O buscando los archivos donde el grupo tiene permisos de lectura:

sudo find -perm /g=r

 

Buscando donde “Otros” tiene permisos de lectura

sudo find -perm /o=r

 

Buscando archivos en los que “todos” tienen permisos de lectura:

sudo find -perm /a=r

 

 

También podríamos buscar según permisos en octal. Así que los archivos donde solo el usuario tenga permisos de escritura y lectura, y nadie más tenga permisos (tendría estos permisos:  -rw——-   ), lo buscaríamos con:

sudo find -perm 600

 


 

 

Buscar archivos ejecutables (archivos con permiso de ejecución)

 
De la misma forma que hemos buscado archivos con permisos de solo lectura, también podemos buscar archivos ejecutables.
 

En este caso buscamos en Linux los archivos ejecutables por el usuario propietario:

sudo find -perm /u=x

 

También de esta forma:

sudo find -perm /u=+x

 

Y con notación octal (en este caso buscamos archivos que tengan permisos 771, que son lectura, escritura y ejecución para el propietario “u” y para el grupo “g“, y solo ejecución para “otros”  “o“)

sudo find -perm 771

 


 

 

Buscar archivos que NO tengan ciertos permisos

 

Y al revés, podemos buscar los archivos que NO tengan ciertos permisos, con el parámetro -perm, y colocando antes la exclamación !

 

find / -type f ! -perm 777

find Descargas/ -type f ! -perm 0777 -print

 

 

 

Buscar archivos por su edad (días, minutos … )

 

Buscar archivos por su edad en días

 

  • Podemos usar varios parámetros para buscar ficheros por su edad en días:
       
    • Buscar por tiempo de acceso
      -atime
    • Buscar por el tiempo de la última modificación:
      -mtime
    • Buscar por último cambio de fichero:
      -ctime

 
Con el parámetro -mtime y el número de días, podemos buscar archivos que hayan sido modificados en n días o menos:

find Descargas/ -type f -mtime -7 -print

 


 
Con mtime también podemos buscar los últimos archivos modificados.
 

 

Buscar archivos por su edad en minutos

 

  • También podemos buscar ficheros por minutos (ficheros que hayan sido modificados en los últimos “n” minutos).
    • Lo haremos con el parámetro -mmin

 

Con el parámetro -mmin y el número de minutos deseados, find buscará los archivos que hayan sido modificados en un número de minutos inferior el seleccionado.
 

Buscamos los archivos modificados en los últimos 30 minutos :

find Descargas/ -type f -mmin -30 -print -ls

 

 

También podemos delimitar un rango de días en los que los ficheros buscados hayan sido modificados.

Por ejemplo, buscamos los archivos que tengan entre

 

Buscar archivos por tamaño

 

Usaremos el parámetro -size y el tamaño mínimo que tienen los archivos que buscamos:

find Descargas/ -type f -size +1k -print -ls

 

 

 

Buscar archivos por usuario propietario

 

Usaremos el parámetro -user, para buscar archivos cuyo propietario sea un usuario concreto.

find Descargas/ -type f -user test -print -ls

 

 

 

Buscar archivos que NO pertenecen a un usuario

 
De igual forma, podemos buscar archivos que NO pertenezcan a un usuario, con el parámetro -nouser


 

 

Buscar archivos por grupo

 

Buscamos los archivos pertenecientes a un grupo con el parámetro -group

En este caso buscamos en el directorio /root/ los archivos pertenecientes al grupo “test

sudo find /root/ -group test

 

 

 

Buscar varios archivos y eliminarlos

 

find . -type f -name "*.jpg" -exec rm -f {} \;

 

 

 

Buscar archivos vacíos

 
Usaremos el parámetro -empty

find . -type f -empty

 

En este caso estamos buscando archivos vacíos en el directorio actual.

Si queremos buscar archivos vacíos en otra ruta, simplemente la pondremos, como por ejemplo

/home/usuario
/tmp

 

 

Buscar directorios vacíos

 
De nuevo usamos el parámetro -empty

Pero en lugar de buscar por tipo fichero (f), buscamos por tipo directorio (d):

find . -type d -empty

 

 

 

Buscar archivos ocultos

 
Buscamos archivos ocultos en Linux, que son los que comienzan por un punto.

En este caso realizamos la búsqueda en el directorio home del usuario:

find $HOME -type f -name ".*"

 

 

 

Buscar con un nivel máximo de recursión : maxdepth

 

Usaremos el parámetro -maxdepth

find . -maxdepth 1 -name "*.txt"
find . -maxdepth 2 -name "*.txt"

 

Los comentarios de Disqus están cargando....