El find
command es una de las herramientas más poderosas en el arsenal de los administradores de sistemas Linux. Busca archivos y directorios en una jerarquía de directorios basada en una expresión dada por el usuario y puede realizar acciones especificadas por el usuario en cada archivo coincidente.
Puedes usar el find
Comando para buscar archivos y directorios según sus permisos, tipo, fecha, propiedad, tamaño y más. También se puede combinar con otras herramientas como grep
o sed
.
find
Sintaxis del comando #
La sintaxis general para find
El comando es el siguiente:
find [options] [path...] [expression]
- Las
options
El atributo controla el tratamiento de los enlaces simbólicos, las opciones de depuración y el método de optimización. - La
path...
El atributo define el directorio o directorios de inicio donde find buscará los archivos. - La
expression
El atributo se compone de opciones, patrones de búsqueda y acciones separadas por operadores.
Para buscar archivos en un directorio, el usuario invoca el find
el comando necesita tener permisos de lectura en ese directorio.
Echemos un vistazo al siguiente ejemplo:
find -L /var/www -name "*.js"
- La opción
-L
(opciones) le dice alfind
comando para seguir enlaces simbólicos. - El
/var/www
(ruta…) especifica el directorio en el que se buscará. - El (expresión)
-name "*.js
le dice afind
para buscar archivos que terminan en.js
(archivos JavaScript).
Buscar archivos por nombre #
Buscar archivos por nombre es probablemente el uso más común de find
dominio. Para encontrar un archivo por su nombre, use el -name
opción seguida del nombre del archivo que está buscando.
Por ejemplo, para buscar un archivo llamado document.pdf
en el /home/linuxize
directorio, usaría el siguiente comando:
find /home/linuxize -type f -name document.pdf
Para ejecutar una búsqueda que no distinga entre mayúsculas y minúsculas, cambie el -name
opción con -iname
:
find /home/linuxize -type f -iname document.pdf
El comando anterior coincidirá con "Documento.pdf", "DOCUMENTO.pdf" ..etc.
Buscar archivos por número de extensión
Buscar archivos por extensión es lo mismo que buscar archivos por nombre. Por ejemplo, para encontrar todos los archivos que terminan en .log.gz
dentro del /var/log/nginx
directorio, escribiría:
find /var/log/nginx -type f -name '*.log.gz'
Es importante mencionar que debe citar el patrón o escapar del asterisco *
símbolo con barra invertida \
para que el shell no lo interprete cuando use el carácter comodín.
Para encontrar todos los archivos que no coinciden con la expresión regular *.log.gz
puedes usar el -not
opción. Por ejemplo, para encontrar todos los archivos que no terminan en *.log.gz
usarías:
find /var/log/nginx -type f -not -name '*.log.gz'
Buscar archivos por tipo #
A veces, es posible que deba buscar tipos de archivos específicos, como archivos normales, directorios o enlaces simbólicos. En Linux, todo es un archivo.
Para buscar archivos según su tipo, utilice el -type
opción y uno de los siguientes descriptores para especificar el tipo de archivo:
f
:un archivo normald
:directoriol
:enlace simbólicoc
:dispositivos de personajesb
:bloquear dispositivosp
:tubería con nombre (FIFO)s
:enchufe
Por ejemplo, para buscar todos los directorios en el directorio de trabajo actual, usaría:
find . -type d
El ejemplo común sería cambiar recursivamente los permisos del archivo del sitio web a 644
y permisos de directorio a 755
usando el chmod
comando:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
Buscar archivos por número de tamaño
Para buscar archivos según el tamaño del archivo, pase el -size
parámetro junto con los criterios de tamaño. Puede utilizar los siguientes sufijos para especificar el tamaño del archivo:
b
:bloques de 512 bytes (predeterminado)c
:bytesw
:palabras de dos bytesk
:kilobytesM
:MegabytesG
:Gigabytes
El siguiente comando encontrará todos los archivos de exactamente 1024
bytes dentro del /tmp
directorio:
find /tmp -type f -size 1024c
El find
El comando también le permite buscar archivos que son mayores o menores que un tamaño especificado.
En el siguiente ejemplo, buscamos todos los archivos de menos de 1MB
dentro del directorio de trabajo actual. Fíjate en el signo menos -
símbolo antes del valor del tamaño:
find . -type f -size -1M
Si desea buscar archivos con un tamaño superior a 1MB
, entonces necesitas usar el signo más +
símbolo:
find . -type f -size +1M
Incluso puede buscar archivos dentro de un rango de tamaño. El siguiente comando encontrará todos los archivos entre 1
y 2MB
:
find . -type f -size +1M -size 21M
Buscar archivos por fecha de modificación #
El find
El comando también puede buscar archivos en función de su última modificación, acceso o cambio de hora.
Al igual que cuando busca por tamaño, use los símbolos más y menos para "mayor que" o "menor que".
Digamos que hace unos días, modificó uno de los archivos de configuración de dovecot, pero olvidó cuál. Puede filtrar fácilmente todos los archivos en /etc/dovecot/conf.d
directorio que termina con .conf
y ha sido modificado en los últimos cinco días:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Aquí hay otro ejemplo de filtrado de archivos basado en la fecha de modificación usando -daystart
opción. El siguiente comando enumerará todos los archivos en /home
directorio que fueron modificados 30
o hace más días:
find /home -mtime +30 -daystart
Buscar archivos por permisos #
El -perm
La opción le permite buscar archivos en función de los permisos de archivo.
Por ejemplo, para encontrar todos los archivos con permisos de exactamente 775
dentro del /var/www/html
directorio, usaría:
find /var/www/html -perm 644
Puede prefijar el modo numérico con menos -
o barra inclinada /
.
Cuando la barra /
se usa como prefijo, entonces al menos una categoría (usuario, grupo u otros) debe tener al menos los bits respectivos configurados para que un archivo coincida.
Considere el siguiente comando de ejemplo:
find . -perm /444
El comando anterior hará coincidir todos los archivos con permisos de lectura establecidos para usuarios, grupos u otros.
Si menos -
se usa como prefijo, entonces para que el archivo coincida, se deben configurar al menos los bits especificados. El siguiente comando buscará archivos que tengan permiso de lectura y escritura para el propietario y el grupo y que otros usuarios puedan leer:
find . -perm -664
Buscar archivos por número de propietario
Para buscar archivos propiedad de un usuario o grupo en particular, use el -user
y -group
opciones.
Por ejemplo, para buscar todos los archivos y directorios propiedad del usuario linuxize
, ejecutarías:
find / -user linuxize
Aquí hay un ejemplo del mundo real. Digamos que desea encontrar todos los archivos propiedad del usuario www-data
y cambie la propiedad de los archivos coincidentes de www-data
a nginx
:
find / -user www-data -type f -exec chown nginx {} \;
Buscar y eliminar archivos #
Para eliminar todos los archivos coincidentes, agregue -delete
opción al final de la expresión de coincidencia.
Asegúrese de utilizar esta opción solo cuando esté seguro de que el resultado coincide con los archivos que desea eliminar. Siempre es una buena idea imprimir los archivos coincidentes antes de usar -delete
opción.
Por ejemplo, para eliminar todos los archivos que terminan en .temp
desde el /var/log/
, usarías:
find /var/log/ -name `*.temp` -delete
Usa el -delete
opción con extrema precaución. El find
el comando se evalúa como una expresión y si agrega -delete
primero, el comando eliminará todo lo que esté debajo de los puntos de inicio que especificó.
Cuando se trata de directorios, find
solo puede eliminar directorios vacíos, igual que rmdir
.
Conclusión #
Le hemos mostrado cómo usar el find
Comando con varias opciones y criterios.
Este artículo debería brindarle una comprensión fundamental de cómo ubicar archivos en sus sistemas Linux. También puede visitar el find
página del manual y lea sobre todas las demás opciones poderosas de find
comando.
Si tiene alguna pregunta o comentario, deje un comentario a continuación.