Buscar archivos en Linux desde la línea de comandos es fácil usando el comando find
. Este comando de Linux usa un sencillo mecanismo condicional para filtrar objetos. Veamos cómo se usa el comando find
en Linux para encontrar un archivo desde la línea de comandos.
Comando find en Linux
El comando find
se usa para localizar archivos en Linux, basándose en los criterios especificados por el usuario. La sintaxis básica del comando es la siguiente:
find -opciones /ruta expresión
Atributos del comando find
-opciones
: las opciones o parámetros de búsqueda permiten controlar el comportamiento y el método de optimización del proceso defind
./ruta
: define la ruta de acceso al directorio a partir de la cual el comandofind
empezará a filtrar.expresión
: define las acciones a realizar para crear un resultado.
Opciones del comando find
Localizar archivos por nombre en Linux
Para encontrar archivos por nombre en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -name nombredelarchivo
Localizar archivos por extensión
Para encontrar archivos por extensión en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -name *.html
Localizar archivos en el directorio actual
Para encontrar archivos en el directorio actual, hay que introducir el siguiente comando en la línea de comandos:
find . -name nombredelarchivo.html
Localizar archivos modificados durante un período de tiempo
Para encontrar archivos que hayan sido modificados durante la semana anterior, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -mtime 7 “.html”
Localizar archivos modificados durante un período de tiempo por un usuario específico
Para encontrar archivos que hayan sido modificados durante la semana anterior por un usuario en particular, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -user nombredeusuario -mtime 7 “.html”
Limitar la búsqueda a un número específico de subdirectorios
Para limitar la búsqueda a una cantidad específica de subdirectorios, hay que añadir la opción -maxdepth X
al comando:
find -maxdepth 3 /ruta -name *.html
Ignorar mayúsculas y minúsculas
Para hacer una búsqueda ignorando mayúsculas y minúsculas, hay que añadir la opción -iname
al comando:
find /ruta -iname *.html
Buscar archivos
Para buscar archivos exclusivamente, hay que añadir la opción -type f
al comando:
find /ruta -type f -name “*.html”
Buscar directorios
Para buscar directorios exclusivamente, hay que añadir la opción -type d
al comando:
find /ruta -type d -name “*.html”
Seguir y mostrar enlaces simbólicos
Dado que el comando find
ignora los enlaces simbólicos por defecto, hay que añadir la opción -L
al comando para seguirlos y mostrarlos:
find -L /ruta -name *.html
Localizar archivos por tamaño
Para encontrar archivos de más de 500 MB en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -size +500M
Combinar dos condiciones o filtros
Por ejemplo, para filtrar archivos de entre 500 MB y 1 GB en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -size +500M -and -size -1G
Filtrar por al menos una de las condiciones que se especifican
Por ejemplo, para filtrar archivos por una de las extensiones indicadas en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -name *.docx -or -name *.odt
Excluir la segunda condición
Por ejemplo, para excluir una extensión de la búsqueda en un directorio y todos sus subdirectorios, hay que introducir el siguiente comando en la línea de comandos:
find /ruta -name *.docx -not -name *.odt
Opción o parámetro de búsqueda | Uso |
-name | Filtrar archivos por nombre. |
-iname | Hacer una búsqueda por nombre sin tener en cuenta mayúsculas y minúsculas para localizar un archivo. |
. | Buscar en el directorio actual. |
-type | Filtrar archivos por tipo de archivo. |
-user | Filtrar archivos por usuario. |
-mtime | Filtrar archivos limitando el período de tiempo de su modificación. |
-maxdepth | Limitar la búsqueda a un número concreto de subdirectorios. |
-L | Incluir los enlaces simbólicos en la búsqueda. |
-size | Filtrar por tamaño de archivo. |
-and | Se sitúa entre dos condiciones para indicar que es necesario incluir ambas. |
-or | Se sitúa entre dos condiciones para indicar que es necesario filtrar por al menos una de las condiciones. |
-not | Se sitúa entre dos condiciones para indicar que es necesario ignorar la segunda condición. |
Optimizaciones del comando find
Estas son las tres fases de optimización para mejorar el filtrado cuando se usa el comando find
en Linux.
-O1: por defecto
-O1 es la configuración estándar. Permite que find
empiece a filtrar por nombre de archivo antes de ejecutar cualquier otro test.
find -O1 /ruta -name "*.html"
-O2: nombre de archivo y tipo de archivo
-O2 permite que find
filtre por nombre de archivo y tipo de archivo antes de pasar a los filtros que requieran más recursos.
find -O2 /ruta -name "*.html"
-O3: eficiencia y probabilidad de éxito
-O3 permite que find
reorganice automáticamente los filtros para priorizar la eficiencia y la probabilidad de éxito.
find -O3 /ruta -name "*.html"
Búsquedas basadas en contenido: Find + Grep
El comando find
de Linux solo filtra archivos en base a nombres de archivo y metadatos. Así que, para buscar archivos en base a su contenido, es necesario añadir el comando grep
a la línea de comandos:
find /ruta -type f -exec grep “contenido” ‘{}’ \; -print
-exec
: es un comando que permite al comandofind
ejecutar una tarea específica una vez en cada archivo que se ajuste a la búsqueda.‘{}’
: las llaves son el marcador de posición de los resultados que se ajustan a la búsqueda.\;
: la opción-exec
se cierra con una barra invertida y un punto y coma para evitar que pueda ser interpretada por el shell.-print
: muestra los resultados en la pantalla.