Inicio InformáticaGnu/Linux Find, un comando para encontrarlo todo en Gnu/Linux

Find, un comando para encontrarlo todo en Gnu/Linux

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

El siguiente artículo voy a dejarlo colgado por que hoy necesité buscar de forma recursiva en diferentes equipos. Hay montón de aplicaciones de búsquedas que podemos encontrar para nuestro sistema Ubuntu, pero también disponemos del comando Find. Se trata de una de las herramientas más potentes en el arsenal de administradores de sistemas Gnu/Linux.

Find es una utilidad para la línea de comandos que le permite buscar archivos y directorios en una jerarquía de directorios en función de una expresión dada por el usuario. Se aplica una acción especificada por el usuario en cada archivo coincidente.

Podremos utilizar el comando find para buscar archivos según los permisos de archivo, tipo, fecha, propiedad, tamaño y más. También se puede usar en combinación con otras herramientas como grep o sed para realizar operaciones sobre esos archivos.

Sintaxis de comandos Find en Gnu/Linux

Antes de entrar en cómo usar el comando de búsqueda, comencemos por revisar la sintaxis básica. Las expresiones de utilidad de búsqueda tienen la siguiente forma:

find [opciones] [ruta ...] [expresión]
  • El atributo de «opciones» controla el tratamiento de los enlaces simbólicos, las opciones de depuración y el método de optimización.
  • «Ruta» define el directorio o directorios de inicio donde find buscará los archivos.
  • El atributo de «expresión» se compone de opciones, patrones de búsqueda y acciones separadas por operadores.

Echemos un vistazo al siguiente comando:

find -L /home/usuario/ -name "*.js" -exec chmod 644 {} \;

Este comando incluye un parámetro -L (opciones) que permite buscar seguir enlaces simbólicos, busca todo el árbol de directorios debajo de /home/usuario /(ruta …) para todos los archivos que terminan con .js y establece los permisos de todos los archivos encontrados en 644.

Buscar archivos por tipo

Para especificar el tipo de archivos que queremos buscar, usaremos el parámetro -type.

Podremos utilizar los siguientes descriptores para especificar el tipo de archivo:

  • f: archivo regular
  • d: directorio
  • l: enlace simbólico
  • c: dispositivos de personaje
  • b: dispositivos de bloque
  • p: canalización con nombre (FIFO)
  • s: socket

Por ejemplo, si quiere encontrar todos los directorios en el directorio actual simplemente ejecutaremos:

find . -type d

O si queremos enumerar todos los dispositivos de caracteres en su tipo de sistema:

find / -type c

Para cambiar todos los permisos de archivos a 644 y todos los permisos de directorio a 755, ejecuta los siguientes comandos:

find /var/www/my_project -type d -exec chmod 0755 {} \;
find /var/www/my_project -type f -exec chmod 0644 {} \;

Buscar archivos por nombre

Encontrar los archivos por nombre es probablemente el uso más común para el comando de búsqueda. Para buscar un archivo por su nombre. Pasaremos la opción -name junto con el nombre del archivo que está buscando.

Para buscar un archivo llamado robots.txt en el directorio /home/sapoclay/Documentos, debemos usar el siguiente comando:

Comando find búsqueda de un archivo

sudo find /home/sapoclay/Documentos -type f -name robots.txt

Si desea hacer una búsqueda que no distinga entre mayúsculas y minúsculas, tendremos que cambiar la opción -name por -imame:

sudo find /home/sapoclay/Documentos -type f -iname robots.txt

El comando de arriba coincidirá con robots.txt, ROBOTS.txt, ..etc.

Buscar archivos por extensión

Buscar archivos por extensión es lo mismo que buscar archivos por nombre. Por ejemplo, si nos interesase encontrar todos los archivos que terminan en .log.gz dentro del directorio /var/log, podremos utilizar:

find /var/log -type f -name '*.log.gz'

Es importante mencionar que cuando usamos un carácter comodín, debemos citar el patrón o escapar del símbolo de asterisco * con barra invertida \\ para que no sea interpretado por el intérprete de comandos.

Si preferimos buscar todos los archivos que no coinciden con la expresión regular * .log.gz, podemos utilizar el parámetro -not. Por ejemplo, para encontrar que todos los archivos no terminan en * .log.gz, que usaría:

find /var/log/nginx -type f -not -name '*.log.gz'

Buscar archivos por tamaño

Para buscar archivos según el tamaño, simplemente pasaremos el parámetro tamaño junto con los criterios de tamaño. Podemos utilizar los siguientes sufijos para especificar el tamaño:

  • b: bloques de 512 bytes (predeterminado)
  • c: bytes
  • w: palabras de dos bytes
  • k: Kilobytes
  • M: Megabytes
  • G: Gigabytes

Supongamos que estamos buscando todos los archivos de exactamente 1024 bytes dentro del directorio ‘/tmp‘. Tendremos que ejecutar algo como:

find /tmp -type f -size 1024c

El comando find también nos permite buscar archivos que son mayores o menores que un tamaño específico.

En el siguiente ejemplo estamos buscando todos los archivos de menos de 1MB dentro del directorio de trabajo actual, observe el símbolo menos antes del valor del tamaño:

find . -type f -size -1M

Si queremos buscar archivos con un tamaño superior a 1 MB, debemos usar el símbolo más +:

find . -type f -size +1M

Incluso podremos buscar archivos dentro de un rango de tamaño. Por ejemplo, el siguiente comando encontrará todos los archivos entre 1 y 2 MB:

find . -type f -size +1M -size 21M

Buscar archivos por fecha de modificación

El comando buscar también puede buscar archivos según la última modificación, acceso o cambio de hora.

Igual que cuando buscamos por tamaño, también podemos usar los símbolos más y menos para especificar mayor o menor que.

Digamos que hace unos días modificamos un script, pero olvidamos el nombre del archivo. Vamos a poder filtrar fácilmente todos los archivos en el directorio /home/usuario/scripts/ que terminan con .sh y se han modificado en los últimos 5 días con en comando:

find /home/usuario/scripts/ -name "*.sh" -mtime 5

Aquí hay otro ejemplo de filtrado de archivos basado en la fecha de modificación usando la opción -daystart. Enumeramos todos los archivos en el directorio /home que se modificaron hace un mes o más:

find /home -mtime +30 -daystart

Buscar archivos por permisos

Si deseamos usar el comando find para filtrar archivos según los permisos del archivo, entonces necesitamos usar el parámetro -perm.

Para buscar todos los archivos con permisos 775 dentro del directorio /var/www/html, debemos usar:

find /var/www/html -perm 775

Podemos prefijar el modo numérico con menos ( – ) o barra ( / ).

Si / se usa como el prefijo, al menos una categoría (usuario, grupo u otros) debe tener al menos los bits respectivos establecidos para que un archivo coincida. Considera el siguiente comando de ejemplo:

find . -perm /444

El comando anterior coincidirá con todos los archivos con permisos de lectura establecidos para usuarios, grupos u otros.

Si  – se usa como el prefijo, para que el archivo coincida, al menos deben establecerse los bits especificados.

El siguiente comando buscará archivos que hayan leído y otorgado permisos a su propietario, pero que el grupo y otros usuarios puedan leer pero no escribir en:

find . -perm -664

Buscar archivos por propietario

Para buscar archivos propiedad de un usuario o grupo en particular, podemos utilizar las opciones -user y -group.

Por ejemplo, para buscar todos los archivos y directorios propiedad del usuario sapoclay, simplemente ejecutaremos:

find / -user sapoclay

Aquí hay un ejemplo más avanzado. Digamos que queremos buscar todos los archivos propiedad del usuario www-data y cambiar 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, agregaremos el parámetro -delete al final de la expresión de coincidencia.

Hay que asegurarse de estar utilizando esta opción solo cuando estemos seguros de que los resultados solo coinciden con los archivos que buscamos eliminar. Siempre es una buena idea imprimir los archivos antes de usar la opción -delete.

Por ejemplo, para eliminar todos los archivos que terminan en .temp desde /var/log/ usaríamos:

find /var/log/ -name `*.temp` -delete

En este artículo, hemos visto cómo usar la utilidad de búsqueda de Gnu/Linux en función de varios criterios y ahora tiene una comprensión fundamental de cómo localizar archivos en sus sistemas Linux.

También puede visitar la página man de Find y leer sobre todas las otras opciones poderosas del comando Find.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.