find: Buscando archivos por terminal en GNU/Linux
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 find
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