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.
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:
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) :
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
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”
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) :
Podemos usar estas 3 opciones :
find
find .
find . -print
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"
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
Por ejemplo queremos buscar el directorio “Descargas“:
find $HOME -type d -name Descargas
Buscamos los ficheros con extensión “.txt”
find . -type f -name '*.txt'
Usaremos el parámetro -iname
find / -type d -iname "apt" -ls
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
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
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
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
-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.
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
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
Usaremos el parámetro -user, para buscar archivos cuyo propietario sea un usuario concreto.
find Descargas/ -type f -user test -print -ls
De igual forma, podemos buscar archivos que NO pertenezcan a un usuario, con el parámetro -nouser
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
find . -type f -name "*.jpg" -exec rm -f {} \;
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
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
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 ".*"
Usaremos el parámetro -maxdepth
find . -maxdepth 1 -name "*.txt"
find . -maxdepth 2 -name "*.txt"