Posted by q3it on viernes, septiembre 08, 2023 in Linux
El comando find encuentra ficheros y directorios a través de unas expresiones o unos patrones, el comando find muy potente y tiene muchísimas opciones pero en este post voy a mostrar las más conocidas.
La sintaxis más simple es find [directorio(s)] y esto lo que hará es listar todos sus directorios y ficheros.
Pero lo normal es poner find directorio y expresiones. Estas expresiones son utilizadas para filtrar el resultado, por ejemplo, -name cuando nosotros queremos buscar por un nombre.
Si queremos que no distinga entre mayúscula y minúsculas entonces le doy la opción -iname. Cuando buscamos por nombre pero no sabemos en que termina dicho nombre, entonces podemos utilizar el asterisco * y nos va a mostrar todos los ficheros que empiecen por ejemplo, find . -iname "net*".
Si queremos mostrar sólo los ficheros o los directores o los enlaces. Utilizaremos -type la letra f para ficheros, la letra d de directorios y la letra l para links o enlaces.
Otra de las expresiones más comunes cuando utilizamos find es buscar por tamaño y para eso utilizaremos -size y el tamaño, nosotros podemos especificar un tamaño fijo o un fichero de más de un tamaño. Además podemos utilizar las letras K, M, G, para indicar el tamaño. Por defecto busca por ficheros con tamaño de bloque de 512 bits pero nosotros podemos especificar los ficheros de más de un megabytes.
Otra de las cosas que nosotros queramos encontrar son ficheros que se han modificado en cierto rango de fechas. Para eso utilizaremos -atime, -ctime y -mtime. Por ejemplo, si queremos ver todos los ficheros modificados en las últimas 24 horas en el último día utilizaremos, find . -mtime -1 y esos son todos los ficheros que se han modificado las últimas 24 horas.
Si nosotros queremos buscar en por minutos utilizaremos -amin, -cmin y -mmin. Por ejemplo, si quiero ver los ficheros que se han modificado en el último minuto utilizaríamos en vez de -mtime -mmin. En mi no se me muestra nada, pero si yo hago algo dentro del fichero Balance, y le decimos que nos muestre lo que se ha modificado en los últimos 5 minutos, este es el resultado...
Otra de las cosas que podemos utilizar el comando find es para buscar ficheros o directorios que pertenezca a un usuario particular. Para eso utilizaremos, por ejemplo, find y todos los directorios y ficheros que pertenezcan a el usuario root.
Y lo mismo para grupos, en vez de la palabra -user utilizáremos la palabra -group. Otra opción es si nosotros queremos limitar la profundidad, porque si nosotros estamos buscando un directorio va a buscar en tantos subdirectorios tenga ese directorio, e irá recorriendo esos subdirectorios uno dentro de otro. Si queremos solo un subdirectorios o subdirectorios podemos con maxdepht delimitarlos.
Más cosas útiles es cuando nosotros tenemos enlaces duros y queremos borrar un fichero. Sabemos que hasta que no eliminemos todos los ficheros que hagan referencia a este inodo no se borrará el contenido. Entonces con find y el número de inodo nos buscará todos los ficheros con ese inodo.
Más cosas que nos permite find es ejecutar un comando por cada uno de los resultados. Para eso utilizaremos el comando que nosotros queremos ejecutar y luego para acabarlo acabamos con un punto y coma escapado, porque es un carácter especial y cada uno de los ficheros que encuentra se va a meter en las llaves. Eso funciona igual que el comando xargs.
Imaginemos que nosotros queremos buscar ficheros que sean muy antiguos, más de 90 días, que no se hayan modificado y lo que queremos es eliminarlos, pues nosotros podemos utilizar exec rm {} \;. Lo que haría por cada uno de estos ficheros es eliminarlos. Siempre se recomienda que antes de utilizar cualquier comando para borrar se utilice un echo y la opción -v para que nos muestre que va a hacer.