Comando Find con ejemplos.
Nota editor: Por un error de interpretación del html, he reeditado para que el comando find ejecute otro comando ya que se comía un parámetro.
Antes:
m3t4g4m3 nexolinux: ~ $ find . - perm g=r -type f -exec ls -l {} \;
Después:
m3t4g4m3 nexolinux: ~ $ find . - perm g=r -type f -exec ls -l {} \\;
Si no ponemos el caracter de escape «\\» el shell interpretará el «;» como una concatenación de comandos y daría fallo del primero por faltar ese parámetro.
Si hay comandos que hay que conocer a fondo, este es uno de ellos, en ocasiones localizar ficheros en la shell es un poco caótico. y en ocasiones no podemos perder demasiado tiempo para encontrarlo, voy a dar una guía para montar ejemplos prácticos y se puedan ver los resultados.
En primer lugar vamos a crear la siguiente estructura, para ello tenemos este script que lo ejecutáis y os lo creará:
m3t4g4m3 nexolinux: ~ $ vi find.sh !#/bin/bash touch NexoLinux.sh touch nexolinux.c touch nexo.c touch nexoLinux.c mkdir nexo cd nexo/ touch NexoLinux.sh touch nexolinux.c touch nexo.c touch nexoLinux.c
m3t4g4m3 nexolinux: ~ $ chmod +x find.sh
m3t4g4m3 nexolinux: ~ $ sh find.sh
m3t4g4m3 nexolinux: ~ $ tree ├── nexo │ ├── nexo.c │ ├── nexolinux.c │ ├── nexoLinux.c │ └── NexoLinux.sh ├── nexo.c ├── nexolinux.c ├── nexoLinux.c └── NexoLinux.sh 1 directory, 8 files
Encontrar ficheros usando el nombre.
m3t4g4m3 nexolinux: ~ $ find -name nexolinux.c ./nexo/nexolinux.c ./nexolinux.c
Con este ejemplo mientras no pongamos nada find buscará en la ruta sobre la que estamos y subcarpetas, si pusieramos «find /home -name nexolinux.c» buscaría en la carpeta /home y subcarpetas.
Encontrar ficheros con un nombre determinado ignorando mayúsculas
m3t4g4m3 nexolinux: ~ $ find -iname "nexolinux.c" ./nexo/nexoLinux.c ./nexo/nexolinux.c ./nexoLinux.c ./nexolinux.c
Encontrar y listar ficheros con unos permisos determinados, en este caso con permiso de lectura para grupos, en ocasiones puede ser útil por un servicio o programa determinado que falla y no sabemos en qué subcarpeta le faltan permisos
m3t4g4m3 nexolinux: ~ $ find . - perm g=r -type f -exec ls -l {} \\;
Encontrar los 5 ficheros más grandes.
m3t4g4m3 nexolinux: ~ $ find . -type f -exec ls -s {} \\; sort -n -r | head -5
Encontrar los 5 ficheros más pequeños:
m3t4g4m3 nexolinux: ~ $ find . -type f -exec ls -s {} \\; sort -n | head -5
Encontrar ficheros basados en un tipo, para buscar sólo carpetas, ficheros o lo que queramos:
Si queremos buscar ficheros exclusivamente:
m3t4g4m3 nexolinux: ~ $ find . -type f
Para buscar carpetas:
m3t4g4m3 nexolinux: ~ $ find . -type d
Buscar ficheros más grandes de un determinado tamaño, como por ejemplo más de 100 Megas:
m3t4g4m3 nexolinux: ~ $ find /home -size +100M
Con menos de 100 Megas:
m3t4g4m3 nexolinux: ~ $ find /home -size -100M
También se pueden encontrar ficheros basados en el tiempo de acceso, modificación y cambio.
Ficheros que se han cambiado durante la última hora:
-mmin n El fichero fue modificado hace n minutos
-mtime n El fichero fue modificado hace n*24 horas
Por ejemplo para buscar un fichero en el directorio actual que se haya actualizado en la última hora:
m3t4g4m3 nexolinux: ~ $ find . -mmin -60
Y para hacerlo en las últimas 24 horas:
m3t4g4m3 nexolinux: ~ $ find . -mtime -1
Fichero a los que se ha accedido hace una hora como mucho:
-amin n El fichero fue accedido hace n minutos.
-atime n el fichero fue accedido hace n*24 horas.
En este ejemplo vamos a buscar ficheros accedidos en la última hora:
m3t4g4m3 nexolinux: ~ $ find -amin -60
Ficheros que se han cambiado antes de una hora:
-cmin n Ficheros cambiados en los últimos n minutos.
-ctime n Ficheros cambiados en las últimas n*24 horas.
Este es otro ejemplo de los que se han cambiado en la última hora:
m3t4g4m3 nexolinux: ~ $ find . -cmin -60
Encontrar ficheros que han sido accedidos después de una modificación de un fichero específico:
m3t4g4m3 nexolinux: ~ $ find -anewer Fichero
Este es un ejemplo práctico:
m3t4g4m3 nexolinux: ~ $ find -anewer /opt/apache