15 Ejemplos del comando FIND en Linux

El comando de búsqueda (find) se utiliza para buscar archivos y directorios en la línea de comandos de Linux.

Find es uno de los comandos más potentes y de mayor uso, es uno de los comandos más extensos con más de 50 opciones diferentes.

Eso lo hace un poco confuso, especialmente cuando se combina con el comando exec o xargs.

Es imposible que un administrador de sistemas o desarrollador de software evite el comando de búsqueda mientras trabaja en la línea de comandos.

En lugar de tenerle miedo, debes abrazar todo su poder y comenzar a sacarle el mayor partido posible.

Vamos a ver algunos posibles ejemplos del comando findo que es probable que utilices en algún momento.

Pero antes de eso, déjame mostrarte su sintaxis y cómo usarlo.

Comando find en linux

La sintaxis general para el comando de búsqueda es:

find [directorio de búsqueda] [opciones] [expresión]

Todo lo que está entre paréntesis [] es opcional, eso significa que puedes ejecutar el comando find sin opciones ni argumentos extra.

Eso, simplemente, volcará todos los archivos y directorios en la ubicación actual.

Veámoslo al detalle:

  • directorio de búsqueda es básicamente la ubicación desde donde deseas iniciar tu búsqueda. De forma predeterminada, la búsqueda es recursiva y comienza desde tu ubicación actual.
  • opciones especifica el tipo de búsqueda, ya sea por nombre, por tipo, por tiempo modificado, etc. Existen más de 50 opciones posibles.
  • expresión permite especificar el término de búsqueda. Si deseas buscar un archivo por su nombre, la expresión es el nombre del archivo. Si deseas encontrar archivos con un nombre que coincida con un patrón, la expresión capaz de ejecutar ese patrón.

Aquí tienes un ejemplo:

find . -type f -name NombreArchivo

Este comando ejecutará una búsqueda en el directorio actual y sus subdirectorios para encontrar un archivo (no un directorio) llamado NombreArchivo . La opción -type f pide que busques solamente archivos.

El punto único . significa el directorio actual. A continuación, veamos algunos ejemplos prácticos del comando find.

¿Cómo buscar archivos y directorios por nombre?

Puedes buscar archivos y directorios por su propio nombre, para ello solamente usa el siguiente comando:

find . -name NombreQuierasBuscar

Como no se menciona ningún tipo de archivo, esto buscará tanto archivos como directorios con el nombre dado.

¿Cómo buscar solo archivos o solo directorios?

Si solo deseas buscar archivos, especifica el tipo de archivo -f:

find . -type f -name NombreBuscar

El orden de tipo y nombre no importa. Si solamente deseas buscar directorios, especifica el tipo -d:

find . -type d -name NombreBuscar

¿Cómo ejecutar una búsqueda que no distinga entre mayúsculas y minúsculas?

De forma predeterminada, el comando de búsqueda distingue entre mayúsculas y minúsculas, pero puedes ejecutar una búsqueda que no distinga entre mayúsculas y minúsculas con el nombre dado usando -iname en lugar de -name .

find . -type f -iname NombreBuscar

¿Cómo buscar archivos por su tipo de extensión?

Uno de los usos más comunes del comando de búsqueda es encontrar archivos de un tipo específico o que tenga una extensión específica.

Por ejemplo, supongamos que deseas buscar todos los archivos C++ en los directorios actuales. Los archivos C++ terminan con la extensión .cpp, por lo que puede buscarlos así:

find . -type f -name "*.cpp"

De esta manera, dices al comando de búsqueda que busque type file y con nombres que terminen con .cpp .

¿Cómo buscar varios archivos con varias extensiones (o condiciones)?

El comando anterior buscó archivos con una extensión dada, ¿Qué sucede si quieres buscar archivos con diferentes extensiones?

En lugar de ejecutar el comando de búsqueda varias veces, puedes ejecutarlo una sola vez utilizando la opción -o que funciona como si fuese un OR:

find . -type f -name "*.cpp" -o -name "*.txt" 

¿Cómo buscar archivos en un directorio específico?

Hasta ahora, todos los ejemplos realizaron búsquedas en el directorio actual porque especificaste en los ejemplos.

El punto se puede reemplazar con una ruta absoluta o relativa de un directorio para que puedas buscar archivos en el directorio especificado sin salir de su ubicación actual.

rosepac@ciberninjas$ find ./noticias -name NombreBuscar 

Eso buscara el archivo con el nombre de NombreBuscar dentro del directorio de noticias.

¿Cómo buscar archivos en varios directorios?

Si crees que tus archivos deseados pueden estar ubicados en varias ubicaciones, no tienes que ejecutar el comando de búsqueda varias veces.

Simplemente especifica todas las rutas de directorio en las que quieras buscar dentro de un mismo comando de búsqueda:

find ./DirectorioUno /DirectorioDos/CarpetaPruebas -type f -name "curriculum"

¿Cómo encontrar archivos y directorios vacíos?

La opción -empty permite buscar archivos y directorios vacíos con el comando de búsqueda.

Si quieres encontrar todos los archivos y directorios vacíos en el directorio actual, puedes usar el comando:

find . -empty

También, puedes especificar el tipo de archivo para buscar solo archivos o directorios vacíos:

find . -empty -type f

Incluso puedes combinarlo con la búsqueda de nombre de archivo:

find . -empty -type f -name "*.cpp"

¿Cómo encontrar archivos grandes o pequeños? (búsqueda basada en el tamaño del archivo)

Si quieres encontrar archivos grandes o archivos pequeños, según la búsqueda realizada por el parámetro de tamaño, esto es lo que debes hacer.

Esta búsqueda solamente funciona con archivos y no con directorios.

Utiliza la opción -size con +N para un tamaño mayor que N y -N para un tamaño menor que N.

Si quieres encontrar archivos de exactamente 50 KB de tamaño:e

find . -size 50k

Para buscar archivos de más de 1 GB en el directorio actual:

find . -size +1G

Para encontrar archivos de menos de 20 bytes:

find . -size -20c

Para buscar archivos de más de 100 MB pero de menos de 2 GB:

find . -size +100M -size -2G

También puede combinar la búsqueda de tamaño con la búsqueda de nombre.

Por ejemplo, para buscar todos los archivos con un nombre que termine en .log pero un tamaño superior a 500 MB en el directorio raíz, puedes usar:

find / -size +500M -name "*.log"

Recuerda, estas son las abreviaturas de las medidas:

  • c : bytes
  • k : kilobytes
  • M : Megabytes
  • G : Gigabytes

¿Cómo encontrare archivos modificados recientemente?

Si queremos realizar una búsqueda de archivos modificados hace poco tiempo, debemos de conocer los conceptos de mtime, atime y ctime.

  • mtime: última hora de modificación del archivo
  • ctime: tiempo de creación del archivo
  • atime: última hora de acceso al archivo

A menudo, te encuentras en situaciones en las que deseas encontrar todos los archivos modificados recientemente.

La búsqueda por tiempo modificado ayuda mucho en estos casos.

Si quieres encontrar todos los archivos modificados dentro de los últimos 3 días (3*24H), usa:

find . -type f -mtime -3

Si quieres encontrar todos los archivos creados hace al menos 5 días (5*24H), usa:

find . -type f -ctime +5

Sé que 24 horas es un marco de tiempo enorme. ¿Qué sucede si deseas buscar archivos que se modificaron hace solo unos minutos?

Pues para eso, entra en juego un nuevo parámetro, las opciones de mmin , amin y cmin .

Entonces, si quieres encontrar todos los archivos que se modificaron en los últimos 5 minutos, solamente debes usar:

find . -type f -mmin -5

Además, puedes especificar los límites superior e inferior junto con el nombre de búsqueda.

Por ejemplo, con el siguiente comando se buscarían todos los archivos .java que hayan sido modificados entre los últimos 20 a 30 minutos.

find . -type f -mmin +20 -mmin -30 -name "*.java"

¿Cómo buscar archivos con permisos de archivo específicos?

Seguramente, ya estas familiarizado con el concepto de permisos de los archivos en Linux. Si es así, con el siguiente comando de búsqueda vas a poder buscar archivos con permiso de archivo específicos o un modo de acceso concreto.

find -perm mode

Por ejemplo, si quieres encontrar todos los archivos del modo de acceso 777 en el directorio actual:

find . -perm 777

Para encontrar todos los archivos con acceso de lectura y escritura para todo (coincidencia exacta, no coincidirá si el archivo tiene permiso de ejecución para todos):

find . -perm a=r+w

¿Cómo buscar archivos propiedad de un usuario?

También puede buscar archivos según su propietario. Por ejemplo, para buscar archivos propiedad del usuario Pablo en el directorio actual, podrías usar:

find . -type f -user Pablo

También puedes combinarlos con otras opciones, como por ejemplo la de tamaño, hora o nombre:

find . -type f -user Pablo -name "*.exe"

No busques recursivamente, busca solo en el directorio actual

De forma predeterminada, el comando de búsqueda busca en todos los subdirectorios de tu ubicación actual.

Si no deseas que eso sea así, puedes especificar la profundidad de tu búsqueda.

Eso restringirá la búsqueda solo al directorio actual y excluirá cualquier subdirectorio.

find . -maxdepth 1 -type f -name "*.txt"

¿Cómo excluir un directorio de la búsqueda?

Si deseas excluir un directorio de la búsqueda, puedes hacerlo combinando la ruta.

find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME

Debes tener cuidado con el * en la ruta del directorio, indica -prune después de la ruta y -o después de prune.

Prune siempre se usa con -o para garantizar que el lado derecho de los términos se evalúe solo para directorios que no fueron cortados.

¿Cómo tomar medidas sobre el resultado de los comandos de búsqueda (exec y xargs)?

Hasta el momento, hemos aprendido varias formas de encontrar archivos según varios criterios.

Pero se puede mejorar, tomando ciertas acciones sobre el resultado del comando de búsqueda.

Por ejemplo, ¿Podemos probar a encontrar archivos que coincidan con cierto patrón de nombre y renombrarlos todos a la vez o encontrar archivos vacíos y eliminarlos?

Seguramente conoces las redirecciones mediante tuberías, que se pueden usar para combinar la salida de un comando con la entrada de otro comando.

Basícamente se trata de incluir la barra vertical | entre ambas intrucciones. Pero eso no funcionará con la salida del comando de búsqueda, al menos no directamente.

Existen dos opciones si deseas realizar una acción sobre el resultado del comando de búsqueda:

  • Usar exec
  • Usar xargs

¿Cómo usar find + exec?

Supongamos que deseas hacer una lista larga (ls -l) de los archivos de búsqueda con el comando de búsqueda.

Esto es lo que usarías:

find . -type f -name "*.txt" -exec ls -l {} +

Muchas personas olvidan agregar {} + al final del comando exec. Debes usarlo y tener en cuenta el espacio entre {} y +.

¿Cómo usar find + grep?

Ahora que ya sabes cómo combinar find con exec; el comando xargs, puedes usarlo para combinar find y grep.

Para cualquier administrador de sistemas o desarrollador de software, find y grep son una de las combinaciones más comunes y más útiles.

Busca patrones de nombre de archivo con find y luego usa grep para buscar el contenido dentro de esos archivos.

Por ejemplo, si deseas buscar todos los archivos .txt que contienen el término Alicia. Debes combinar find y grep, tal que así:

find . -type f -name "*.txt" -exec grep -i alicia {} +

Lo mismo se puede lograr con xargs también:

find . -type f -name "*.txt" | xargs grep -i alicia

Por supuesto, este es el más simple de los ejemplos, pero si está familiarizado con el comando grep puede usarlo a tu gusto.


No es posible enumerar todas las opciones y ejemplos del comando find.

Las posibilidades son infinitas, pero cuando te familiarices con el comando de búsqueda vas a poder comenzar a usarlo en una amplia variedad de situaciones.

Depende realmente de ti cómo combines la lógica para lograr los mejores resultados.

Espero que encuentre útiles estos ejemplos de comando de búsqueda, seguiremos revisando comandos, ¡Sigue atento!

Relacionado

Deja un comentario