find: Buscando archivos por terminal en GNU/Linux

Publicado por Diego Córdoba en

Hoy veremos algunos ejemplos de búsquedas de archivos en la terminal de GNU/Linux utilizando en comando find. Aprenderemos su sintáxis básica, y algunos comandos un poquito más avanzados para personalizar nuestras búsquedas.


Sintaxis básica del comando findfind command linux cli

La sintaxis básica del comando es la siguiente:

find ruta/donde/buscar <opcinoes> <patron>

Buscaremos en una ruta determinada archivos que correspondan con un patrón según la opción especificada, por ejemplo, palabras en su nombre, permisos, fechas, tamaños, etc.
Buscando en el directorio local por nombre de archivo

diego@sol:/tmp$ find . -name archivo
./archivo

Buscando con una ruta de entrada:

diego@sol:/tmp$ find /tmp -name archivo
/tmp/archivo

Y si tenemos mayúsculas y minúsculas? iname es la solución:

diego@sol:/tmp$ find /tmp -iname ArChivO
/tmp/archivo

Buscando tipos de archivos especiales… directorios por ejemplo:

diego@sol:/tmp$ find /tmp/ -type d
/tmp/
/tmp/hsperfdata_diego
/tmp/aptitude-root.9208:y0GzUp
...

Y directorios con un nombre determinado?

diego@sol:/tmp$ find /home/ -type d -name diego
/home/diego
...

Cabe aclarar que también es valida la opción «-iname» en este caso.
También, otros tipos comunes son:

-f: files, archivos regulares
-l: symlinks o enlaces simbólicos
-d: directorios
-s: sockets Unix
-p: named pipes, o fifos
-b: dispositivos de bloques
-c: dispositivos de caracter

Busquemos ahora los archivos vacíos:

find / -type f -empty

Lo mismo se aplica a directorios:

find / -type d -empty

Utilizando el comodín ‘*’ para sustituir caracteres:

find /tmp -iname "*.txt"

buscará todos los archivos con extensión .txt en el directorio /tmp

Permisos: Buscando todos los archivos con mode 654 en /home

find /home -type f -perm 654

Buscando todos los archivos con permisos 654 y SUID en /home

find /home -type f -perm 4654

Buscando todos los archivos que no tengan los permisos 654 en /home

find /home -type f ! -perm 654

Buscando en /home todos los archivos con los permisos de ejecución en la terna user

find /home -type f -perm /u=x

O archivos ejecutables en general:

find /home -type f -perm /a=x

Ejecutando comandos con los resultados de búsqueda

Podemos también ejecutar comandos con los resultados de búsqueda, por ejemplo, movamos todos los ejecutables encontrados en /home al directorio /home/ejecutables:

find /home -type f -perm /a=x -exec mv {} /home/ejecutables ;

O borremos, por ejemplo, todos los .avi que tengamos en /tmp:

find /tmp -iname "*-avi" -exec rm -rf {} ;

Busquemos ahora todos los archivos cuyo dueño sea el usuario «diego»:

find / -user diego

Grupos: Buscando los directorios del grupo «users»

find / -group users -type d

Usuarios: Buscando todos los archivos .txt del usuario diego:

find /home -type f -iname "*.txt" -user diego

Fechas: Buscar todos los archivos modificados hace 30 días o más:

find / -mtime 30

O todos los archivos modificados hace menos de 5 días:

find / -mtime -5

O combinando ambos, los modificados hace más de 5 días, y menos de 30:

find / -mtime -30 -mtime +5

O los archivos modificados hace menos de 15 minutos:

find / -mmin -15

O borrar todos los jpg creados hace mas de 45 días:

find / -type f -iname "*.jpg" -mtime +45 -exec rm -rf {} ;

Espero que les haya sido de utilidad!

Fuentes:

man find
http://www.tecmint.com/35-practical-examples-of-linux-find-command/

Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador