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:
Así funciona el comando find: 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“: 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) : Para solucionarlo, enviaremos la salida de standard error (2) a /dev/null (el agujero negro de Linux que se traga todo): 2>/dev/null 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. Buscamos el archivo de nombre “archivo1.txt” o 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) : Un detalle importante es que al buscar en root (/) debemos hacerlo con privilegios de super usuario: Podemos hacer que find muestre de forma detallada los resultados de la búsqueda, añadiendo al final -ls Buscamos los ficheros con extensión “.txt” Usaremos el parámetro -iname 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 Y los enlaces con permisos 0777: O buscando los archivos donde el grupo tiene permisos de lectura: Buscando donde “Otros” tiene permisos de lectura Buscando archivos en los que “todos” tienen permisos de lectura: 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: En este caso buscamos en Linux los archivos ejecutables por el usuario propietario: También de esta forma: 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“) Y al revés, podemos buscar los archivos que NO tengan ciertos permisos, con el parámetro -perm, y colocando antes la exclamación !
Sintaxis del comando find en Linux
Como primer argumento, el comando find espera un directorio donde comenzar a buscar.
find donde qué_queremos_buscar
find Descargas/ -name archivo
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.
De esta forma:sudo find / -type d -iname descargas -ls 2>/dev/null
OPCIONES DEL COMANDO FIND
Buscar archivos por nombre
find . -name archivo1.txt
find . -name 'archivo*'
Mostrar todos los archivos del directorio actual y los subdirectorios
Podemos usar estas 3 opciones :
find
find .
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"
sudo find / -type d -name "apt"
Mostrar de forma detallada la lista de archivos y directorios
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)
find . -type f -name '*.txt'
Realizar búsquedas no sensitivas (sin tener en cuenta que las letras sean mayúsculas o minúsculas)
find / -type d -iname "apt" -ls
Buscar archivos con ciertos permisos
find Descargas/ -type f -perm 0755 -print
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
sudo find -perm /g=r
sudo find -perm /o=r
sudo find -perm /a=r
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.
sudo find -perm /u=x
sudo find -perm /u=+x
sudo find -perm 771
Buscar archivos que NO tengan ciertos permisos
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
-atime |
-mtime |
-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" |