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
- Solucionar el error “permiso denegado” al buscar con find en Linux
- OPCIONES DEL COMANDO FIND EN LINUX
- Buscar archivos por nombre
- Mostrar todos los archivos del directorio actual y los subdirectorios
- Buscar directorios con find
- Mostrar de forma detallada la lista de archivos y directorios
- Buscar directorios por nombre
- Buscar archivos por tipo de archivo (extensión)
- Realizar búsquedas no sensitivas (sin tener en cuenta que las letras sean mayúsculas o minúsculas)
- Buscar archivos con ciertos permisos
- Buscar archivos por su edad
- archivos por tamaño
- archivos por usuario propietario
- archivos que NO pertenecen a un usuario
- archivos por grupo
- varios archivos y eliminarlos
- archivos vacíos
- directorios vacíos
- archivos ocultos
- Buscar con un nivel máximo de recursión : maxdepth
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
- Buscar por tiempo de acceso
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" |