Introducción
El find
es una de las herramientas más poderosas para los administradores de sistemas Linux. Busque 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.
Puede utilizar el find
o para buscar archivos y directorios según los permisos, el tipo, la fecha, la propiedad, el tamaño y más. También se puede utilizar junto con otras herramientas como grep
o sed
.
Buscar sintaxis de comandos
La sintaxis general del find
es la siguiente:
find [options] [path...] [expression]
- El
options
controla el tratamiento de los enlaces simbólicos, las opciones de depuración y el método de optimización. - El
path...
define el directorio o directorios de inicio donde find buscará archivos. - El
expression
consta de opciones, patrones de búsqueda y acciones separadas por operadores.
Para buscar archivos en un directorio, el usuario que invoca el find
debe tener permisos de lectura para ese directorio.
Echemos un vistazo al siguiente ejemplo:
find -L /var/www -name "*.js"
- La
-L
(opciones) indica alfind
que siga los enlaces simbólicos. - La ruta
/var/www
(ruta...) especifica el directorio que se buscará. - La expresión
-name "*.js
(expresión) le dice alfind
de comandos para buscar los archivos que terminan con.js
(archivos JavaScript).
Buscar archivos por nombre
La búsqueda de archivos por nombre es probablemente el uso más común del comando de find
Para encontrar un archivo usando su nombre, la -name
busca el nombre del archivo.
Por ejemplo, para buscar un archivo llamado document.pdf
en el /home/noviello
, debe usar el siguiente comando:
find /home/noviello -type f -name document.pdf
Para realizar una búsqueda que no -iname
entre mayúsculas y minúsculas, cambie la -name
a -iname:
find /home/noviello -type f -iname document.pdf
El comando anterior corresponderá a "Document.pdf", "DOCUMENT.pdf"..etc.
Buscar archivos por 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
, puede usar:
find /var/log/nginx -type f -name '*.log.gz'
Es importante recordar que al usar el carácter comodín, debe citar el patrón o escapar del *
del asterisco con una barra invertida \
para que no sea interpretado por el shell.
Para buscar todos los archivos que no coinciden con la expresión regular *.log.gz
expresión se puede utilizar el -not
opción. Por ejemplo, para buscar todos los archivos que no terminen en *.log.gz
, usaría:
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 la -type
y uno de los siguientes descriptores para especificar el tipo de archivo:
f
: un archivo normald
: directoriol
: enlace simbólicoc
: dispositivos de carácterb
: bloquear dispositivosp
: tubería con nombre (FIFO)s
: tomado
Por ejemplo, para encontrar todos los directorios en el directorio de trabajo actual, use:
find. -type d
El ejemplo común sería cambiar recursivamente los permisos de archivos del sitio web 644
y los permisos de directorio 755
usando el comando chmod
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
Encuentra archivos por tamaño
Para buscar archivos según el tamaño del archivo, pase el -size
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
: bytew
: palabras de dos bytesk
: kilobyteM
: megabytesG
: Gigabyte
El siguiente comando encontrará todos los archivos de exactamente 1024
bytes dentro del directorio /tmp
find /tmp -type f -size 1024c
El find
también le permite buscar archivos que sean más grandes o más pequeños que un tamaño especificado.
En el siguiente ejemplo, buscamos todos los archivos de menos de 1MB
en el directorio de trabajo actual. Tenga en cuenta el símbolo -
no antes del valor del tamaño:
find. -type f -size -1M
Si desea buscar archivos de más de 1MB
, debe usar el símbolo más +
:
find. -type f -size +1M
También 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
de comandos también puede buscar archivos basados en su última modificación, el acceso o la fecha de modificación.
Al igual que con la búsqueda por dimensión, utilice los símbolos más y menos para "mayor que" o "menor que".
Puede filtrar fácilmente todos los archivos en el /etc/dovecot/conf.d
que terminan con .conf
y han sido modificados en los últimos cinco días con:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Aquí hay otro ejemplo de filtrado de archivos según la fecha de modificación mediante la opción -daystart
El siguiente comando enumerará todos los archivos en el /home
que se modificaron hace 30
días o más:
find /home -mtime +30 -daystart
Buscar archivos por permisos
La -perm
permite buscar archivos según los permisos de archivo.
Por ejemplo, para encontrar todos los archivos con 775
dentro del /var/www/html
, necesitará usar:
find /var/www/html -perm 644
Puede agregar un prefijo al modo numérico con menos -
o barra inclinada /
.
Cuando la barra /
se usa como prefijo, al menos una categoría (usuario, grupo u otros) debe tener al menos sus respectivos bits establecidos para que un archivo coincida.
Considere el siguiente comando de ejemplo:
find. -perm /444
El comando anterior coincidirá con todos los archivos con permisos de lectura establecidos por usuario, grupo u otros.
Si usa less -
como prefijo, debe configurar el archivo para que coincida al menos con 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 propietario
Para buscar archivos de propiedad por un usuario o grupo en particular, utilizar los -user
y -group
opciones.
Por ejemplo, para buscar todos los archivos y directorios propiedad del usuario noviello
, ejecute:
find /-user noviello
Supongamos que desea encontrar todos los archivos propiedad del www-data
y cambiar la propiedad de los archivos correspondientes 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 la -delete
al final de la expresión coincidente.
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 correspondientes antes de usar la opción -delete
Por ejemplo, para eliminar todos los archivos que terminan con .temp
del /var/log/
, usaría:
find /var/log/-name '*.temp' -delete
Cuando se trata de directorios, find
solo puede eliminar directorios vacíos como rmdir
.
Conclusión
Le hemos mostrado cómo usar el find
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 la página del manual para el comando de find