Para encontrar archivos en Linux/UNIX podemos hacerlo de forma gráfica mediante el cuadro de diálogo de nuestro explorador de archivos o utilizar de forma más personalizada el terminal, lo que nos dará un abanico muy amplio de posibilidades.
Abriremos una terminal y utilizaremos por línea de comandos:
find <ruta_directorio> <parámetros>
Comando “find”
Los parámetros más utilizados son los siguientes:
-type: filtro por tipo de archivo
-name: filtro por nombre de archivo (no sensible a mayúsculas/minúsculas)
-iname: filtro por nombre de archivo (sensible a mayúsculas/minúsculas)
-size: filtro por tamaño de archivo
-atime, -ctime, -mtime: filtro por tiempo (tiempo de acceso, tiempo de modificación metadatos, nombre o permisos y tiempo de modificación de contenido)
-perm: filtro por permisos/derechos de archivo
-user, -group: filtro por propietario y grupo
Rutas en find:
/ (slash) → busca en todo el sistema.
. (punto) → busca en la carpeta en la que estás trabajando actualmente (directorio actual).
~ (tilde) → para buscar desde tu directorio home.
Limitación de la profundidad de recursión
-maxdepth: Profundidad máxima de recursión
-mindepth: Profundidad mínima de recursión
Ejemplos de usos de Find
Buscar por el nombre de un archivo en el directorio actual:
$ find . -name <nombre_archivo>
$ find . -iname <nombre_archivo> (sensible mayúsculas/minúsculas)
Buscar por tipo de archivo: (f: archivo | d: directorio | l: link o enlace)
$ find . -type f -iname “*.jpeg”
Buscar por tamaño de archivo:
Tamaños: (c: Bytes | k: KB | M: MB | G: GB | b: trozos de 512 bytes)
Restricción al tamaño → (+: el archivo es mayor que el tamaño indicado | – : el archivo es menor que el tamaño indicado)
$ find . -size -300M
$ find . -size +100M -and -size -300M
$ find . -size -5G
Buscar por acceso/modificación/alteración
# archivos a los que se accedió hace un día desde el momento actual.
$ find / -atime 1
# archivos cuyos metadatos se actualizaron hace menos de un día
$ find / -ctime -1
# archivos que tienen un tiempo de modificación de más de dos días.
$ find / -mtime +2
Buscar archivos vacíos
$ find . -type f -size 0b
$ find . -type f -empty
Buscar por permisos
$ find / -perm -644
Ejecutar acciones con los archivos encontrados
Utilizando “-exec <comando> {}” podemos ejecutar el comando que queramos con la salida del find. Todo el comando siempre se termina con el texto constante “{} \; ” o con “+”.
-exec: ejecuta las acciones sin preguntar
-ok: es similar a -exec pero fuerza la confirmación activa
Busca todos los .deb del directorio actual y los muestra con su tamaño al inicio
$ find . -type f -iname "*.deb" -exec ls -sh {} +
Busca los archivos mayores de 2GB y los elimina
$ find /etc -size +2G -exec rm -fv {} +
Busca los 3 ficheros más pequeños del directorio actual
$ find . -type f -exec ls -lsh {} + | sort -n | head -3
Busca los 3 ficheros más grandes del directorio actual
$ find . -type f -exec ls -lsh {} + | sort -nr | head -3
Buscar archivos que son mayores de 50 MB, incluyendo sólo 3 niveles de profundidad y no más de 5 niveles de profundidad que el directorio actual
$ find . -type f -maxdepth 2 -size +50M
Eliminar todos los directorios vacíos del directorio actual preguntado antes de borrar
$ find . -type d -maxdepth 1 -empty -ok rmdir {} +
Borrar todos los archivos vacíos del directorio actual preguntando antes de borrar
$ find . -type f -maxdepth 1 -empty -ok rm {} +
Buscar los archivos con nombre data.txt y que contengan la palabra «millionth». Los errores de permisos son descartados
$ find . -iname "data.txt" 2>/dev/null -exec grep -i "millionth" {} +