gnulinux – Comando Find
Seguimos con esta serie de entradas donde te mostramos lo importante de los comandos, sobre todo para aquellos que estan incursionando en el mundillo de la administrador de sistemas, sysadmin, devops etc. Veremos lo que se puede hacer con el comando find y poco a poco descubriremos lo facil que podria ser implementar en un script. Los dejo con gnulinux – Comando Find
El comando find de Linux es muy potente, pero no es el único también se puede utilizar comandos como awk
, sed
y grep
, claro que con un enfoque distinto ya que estos ultimos nos permiten buscar “dentro” del archivo y find …. ahora veremos:
find [ruta] [expresión_de_búsqueda] [acción]
La [ruta] es cualquier directorio que se quiera indicar y desde donde inicia la búsqueda, ejemplos pueden ser “/etc”, “/home/zambra”, “/”, “.” si no se indica una ruta se toma en cuenta entonces el directorio donde se este parado (pwd) actualemte, es decir el directorio de trabajo actual, que es lo mismo que indicar punto “.”. De hecho es posible indicar más de un directorio de búsqueda como se verá más adelante en un ejemplo.
La [expresión_de_búsqueda] es una o más opciones que puede devolver la búsqueda a realizar en si o acciones a realizar sobre la búsqueda, si no se indica ninguna expresión de búsqueda se aplica por defecto la opción -print que muestra el resultado de la búsqueda.
La [acción] es cualquier comando de Linux invocado a ejecutarse sobre cada archivo o directorio encontrado con la [expresión_de_búsqueda].
Ejemplos de #Busquedas con #FIND:
Buscamos todos los archivos que se llamen peron desde la raiz:
find / -name peron
find / -iname Peron (lo mismo, pero sin tomar en cuenta mayúsculas y minúsculas)
El uso de expresiones regulares en lo que se busca es válido:
find / -name "[0-9]*" (todo lo que empieza con un dígito)
find / -name "[Mm]*" (todo lo que empieza con un la letra M o m)
find / -name "[a-m]*.txt" (todo lo que empieza entre a y m y termine en ".txt")
Busca bajo /home todos los archivos que pertenezcan al usuario evita
find /home -user evita
lo mismo y que contengan con "mayo"
find /home -user evita -name "*mayo*"
No estás limitado a un solo directorio, indica más de uno a buscar antes de las expresiones:
find /etc /usr /var -group admin
(busca en tres directorios todos los archivos o
subdirectorios que pertenezcan al grupo 'admin')
Buscar todos los archivos que hayan cambiado en los últimos 30 minutos:
find / -mmin -30 -type f
los modificados exactamente hace 30 minutos:
find / -mmin 30 -type f
O si deseas buscar en un rango específico de minutos, con este ejemplo buscarías todos los directorios que hayan cambiado hace más de 10 minutos (+10) y menos de 30 (-30)
find / -mmin +10 -mmin -30 -type d
aunque lo anterior sería mas exacto decir los modificados hace 11 minutos o más y 29 minutos o menos, ya que como se vio anteriormente +n y -n indican "mayor que" y "menor que", el ejemplo correcto sería entonces:
find / -mmin +9 -mmin -31 -type d
Importante:
find
ofrece varias opciones de búsqueda por tiempo, pero las principales son: -amin, -atime, -cmin, ctime, -mmin y -mtime. “min” es para periodos de minutos y “time” para periodos de 24 horas.
Los que empiezan con “a” (access) indica el tiempo en que fue accedido (leido) por última vez un archivo. Los que empiezan con “c” (change) indica el tiempo que cambió por última vez el status de un archivo, por ejemplo sus permisos. Los que empiezan con “m” (modify) indica el tiempo en que fue modificado (escrito) por última vez un archivo.
Una consideración a tener con las búsquedas -atime, -ctime y -mtime es que el tiempo se mide en periodos de 24 horas y estos son siempre truncados, con ejemplos es más claro:
find . -mtime 0 (busca archivos modificados entre ahora y hace un dia)
find . -mtime -1 (busca archivos modificados hace menos de un dia)
find . -atime 1 (busca archivos accedidos entre hace 24 y 48 horas)
find . -ctime +1 (busca archivos cuyo status haya cambiado hace más de 48 horas)
Busqueda por tamaño
Una de las actividades básicas de un administrador de sistemas Linux es monitorear el tamaño de archivos, sobre todo de usuarios. Con find
es muy fácil realizar búsquedas por tamaño, se indica con la opción -size, se aplican las mismas reglas para argumentos númericos (+n -n n).
find /var/log -size +15000k -name "*.jpg" (busca archivos mayores a 15 megas del tipo jpg)
find $HOME -800c (busca en tu home todos los archivos menores a 800 bytes (799 realmente))
(archivos de tamaño comprendidos entre 1mb y 10mb)
find . -size +1000k -and -size -10000k
Se admiten cuatro parámetros después del número en -size:
c = bytes
w = 2 byte words
k = kilobytes
b = 512-byte bloques
-exec permite ejecutar acciones sobre el resultado de cada línea o archivo devuelto por find
, o en otras palabras permite incorporar comandos externos para ejecutar sobre cada resultado devuelto. Muy interesante. Así por ejemplo, si queremos buscar todos los archivos mayores a 3 megas en /var y además mostrar su salida en formato ls
, podemos hacer lo siguiente:
find /var -size +3000k -exec ls -lh {} \;
Después de ls -lh
que nos devuelve una salida formateada de ls
se indica la cadena ‘{}’ que se sustituye por cada salida de find.
No hay límite para lo que se puede lograr, así por ejemplo, borrar todo lo mayor a un mega en /tmp.
find /tmp -size +1024k -exec rm -f {} \;
Esto fue gnulinux – Comando Find y espero que les haya sido útil, y sigan en el camino del #SoftawareLibre y la #CulturaLibre
Filed under: gnulinux,scripting - @ 9 mayo, 2022 11:39 pm
Etiquetas: busqueda de archivos, comando, CulturaLibre, find, GeneralRoca, gnulinux, RioNegro, SoftwareLibre