Linux es un sistema operativo de código abierto que se creó como una al­te­r­na­ti­va libre a UNIX. Al igual que en UNIX, la línea de comandos es una he­rra­mie­n­ta fu­n­da­me­n­tal para trabajar en Linux. En ella, el usuario introduce un comando en la línea de comandos que luego se ejecuta.

Para encontrar un archivo en Linux, puedes utilizar el comando Linux find. Esto inicia una búsqueda recursiva en una jerarquía de di­re­c­to­rios siguiendo ciertos criterios. El comando find de Linux es una he­rra­mie­n­ta precisa para encontrar archivos y di­re­c­to­rios y es co­m­pa­ti­ble con casi todas las di­s­tri­bu­cio­nes de Linux.

Dominios web
Compra y registra tu dominio ideal
  • Gratis SSL Wildcard para tra­n­s­fe­re­n­cias de datos más seguras
  • Gratis registro privado para más pri­va­ci­dad

Una visión general del comando find de Linux

Para utilizar el comando find en Linux, tendrás que abrir la línea de comandos. Veamos la es­tru­c­tu­ra general del comando find de Linux:

find <directory_path> <search_parameter>
Nota

Atención: ten cuidado con los comandos en la línea de comandos. Si por error ejecutas el comando equi­vo­ca­do, podrás dañar tu sistema.

En primer lugar, se escribe el comando pro­pia­me­n­te dicho, seguido de una ruta de di­re­c­to­rio y un número variable de pa­rá­me­tros de búsqueda. Un parámetro de búsqueda consiste en un guion que va seguido in­me­dia­ta­me­n­te por el nombre del parámetro. Después un espacio y el valor del parámetro. A co­n­ti­nua­ción, te pre­se­n­ta­mos un resumen de los pa­rá­me­tros de búsqueda más uti­li­za­dos:

Parámetro de búsqueda Ex­pli­ca­ción
-name, -iname Filtrar por nombre de archivo
-type Filtrar por tipo de archivo
-size, -empty Filtrar por tamaño de archivo
-ctime, -mtime, -atime Filtrar por marca de tiempo
-user, -group Filtrar por pro­pie­ta­rio y grupo
-perm Filtrar por derechos de archivo

También se pueden combinar varios pa­rá­me­tros de búsqueda. Aquí se asume im­plí­ci­ta­me­n­te una operación lógica AND. Esto puede es­cri­bi­r­se ex­plí­ci­ta­me­n­te. Además, se puede utilizar un enlace OR o negar una condición:

Parámetro de búsqueda Ex­pli­ca­ción
-and Los re­su­l­ta­dos de la búsqueda deben cumplir ambas co­n­di­cio­nes
-or Los re­su­l­ta­dos de la búsqueda deben cumplir al menos una de las dos co­n­di­cio­nes
-not Negar la condición posterior

Ten en cuenta que debes sustituir los <ma­r­ca­do­res de posición> por valores reales en los si­guie­n­tes ejemplos de código para ejecutar los ejemplos.

Limitar la búsqueda a un di­re­c­to­rio es­pe­cí­fi­co

Veamos cómo podemos limitar la búsqueda a un di­re­c­to­rio es­pe­cí­fi­co. Para buscar en el di­re­c­to­rio actual, uti­li­za­mos el elemento “.” como ruta del di­re­c­to­rio:

find . <search_parameter>

Para buscar en tu propia carpeta de usuario, utiliza la tilde “~” como ruta del di­re­c­to­rio:

find ~ <search_parameter>

También puedes buscar en todo el sistema con el comando find de Linux. Sin embargo, debido al gran número de archivos y a la posible jerarquía profunda de di­re­c­to­rios, esto puede llevar mucho tiempo. Para buscar en todo el sistema, uti­li­za­mos una barra diagonal “/” como ruta de acceso al di­re­c­to­rio:

find / <search_parameter>
Nota

Atención: ten mucho cuidado al aplicar el Linux find en co­m­bi­na­ción con el parámetro “-exec” a todo el sistema.

Pe­r­so­na­li­zar la salida de los re­su­l­ta­dos de la búsqueda

Los re­su­l­ta­dos de la búsqueda del comando find de Linux pueden ser extensos. Por eso puede ser útil influir en cómo se muestran los re­su­l­ta­dos. En este caso, es im­po­r­ta­n­te no utilizar los pa­rá­me­tros propios del comando, sino hacer uso de las llamadas tuberías. En Linux, son útiles para utilizar la salida de un comando como entrada de otro comando.

Para obtener los re­su­l­ta­dos página por página, pasamos la salida del comando find al comando less:

find <directory_path> <search_parameter> | less

Para contar el número de re­su­l­ta­dos, pasamos la salida del comando find al comando wc con el parámetro “-l”:

find <directory_path> <search_parameter> | wc -l

Para ver solo los primeros o los últimos n re­su­l­ta­dos de la búsqueda, pasamos la salida del comando find a los comandos “head” y “tail”. En cada caso, es­pe­ci­fi­ca­mos el parámetro “-n” seguido del número deseado de re­su­l­ta­dos de la búsqueda:

find <directory_path> <search_parameter> | head -n <amount>
find < directory_path> <search_parameter> | tail -n <amount>

Búsqueda de archivos con Linux: casos simples

Los si­guie­n­tes ejemplos limitan la búsqueda al di­re­c­to­rio actual y a cualquier su­b­di­re­c­to­rio. Utiliza el comando cd en la línea de comandos para cambiar a cualquier di­re­c­to­rio. Para probar estos ejemplos, primero cambia a tu carpeta de usuario:

cd ~

Utilizar el comando find de Linux para filtrar por nombre de archivo

Para filtrar por nombres de archivo, utiliza el parámetro “-nombre”. Esto requiere un nombre de archivo exacto y distingue entre ma­yú­s­cu­las y mi­nú­s­cu­las:

find . -name <File_Name>

Aquí estamos buscando un archivo con el nombre exacto “.gitignore”.

find . -name .gitignore

Para no di­fe­re­n­ciar entre mi­nú­s­cu­las y ma­yú­s­cu­las uti­li­za­mos el parámetro “-iname”. La “I” aquí significa “in­se­n­si­ble”, de “case-in­se­n­si­ti­ve”:

find . -iname <file_name>

No­r­ma­l­me­n­te, es más práctico buscar primero sin di­s­ti­n­guir entre ma­yú­s­cu­las y mi­nú­s­cu­las y utilizar el parámetro “-nombre” solo si la búsqueda con “-nombre” devuelve de­ma­sia­dos re­su­l­ta­dos.

Si no queremos buscar un nombre de archivo exacto, sino que queremos utilizar un patrón, uti­li­za­mos el asterisco como marcador de posición “comodín” y es­cri­bi­mos el patrón de búsqueda entre comillas (el asterisco se in­te­r­pre­ta in­te­r­na­me­n­te como “cero hasta que se añadan ca­ra­c­te­res adi­cio­na­les”). En nuestro ejemplo, buscamos archivos y di­re­c­to­rios cuyos nombres contengan el texto “git”:

find . -iname “*git*”

Utilizar el comando find de Linux para filtrar por tipo de archivo

Un aspecto famoso de la filosofía UNIX es el principio de que “todo es un archivo” y lo mismo se aplica en Linux. El término “archivo” se refiere a los archivos en un sentido más amplio. En otras palabras, los di­re­c­to­rios también se asignan como archivos en Linux. Pero para evitar co­n­fu­sio­nes, a veces se utiliza el término más preciso “de­s­cri­p­tor de archivo”.

Cuando hablamos del “tipo de archivo” en Linux, no estamos hablando de si un documento es un archivo Excel o una imagen JPEG. En su lugar, di­s­ti­n­gui­mos entre los di­fe­re­n­tes tipos de de­s­cri­p­to­res de archivo que existen en Linux. El comando find de Linux nos pro­po­r­cio­na el parámetro de búsqueda “-type” para filtrar por tipo de archivo. Por ejemplo, podemos di­s­ti­n­guir entre archivos y di­re­c­to­rios cuando buscamos. A co­n­ti­nua­ción, hemos resumido los tipos de archivo más uti­li­za­dos:

Tipo de archivo Ex­pli­ca­ción
f Archivo
d Di­re­c­to­rio
l Enlace

Para incluir solo los archivos en los re­su­l­ta­dos de la búsqueda, uti­li­za­mos el parámetro “-type” seguido del valor “f”:

find . -type f

Para incluir solo los di­re­c­to­rios en los re­su­l­ta­dos de la búsqueda, uti­li­za­mos el parámetro “-type” seguido del valor “d”:

find . -type d

Para filtrar por extensión de archivo, uti­li­za­mos el parámetro “-iname” y usamos el asterisco como comodín.

Buscar todos los archivos con la extensión jpeg o JPEG:

find . -type f -iname “*.jpeg”

Buscar todos los archivos con la extensión jpeg/JPEG o jpg/JPG:

find . -type f -iname “*.jpeg” -or -iname “*.jpg”

Utilizar el comando find de Linux para filtrar por tamaño

En Linux, el concepto de archivo vincula varias piezas de in­fo­r­ma­ción. Esto suele incluir al menos lo siguiente:

  • Nombre
  • Tipo de archivo
  • Tamaño del archivo
  • Marca de tiempo
  • Pro­pie­ta­rio y grupo
  • Derechos de acceso

Todos ellos pueden filtrarse uti­li­za­n­do el comando find y los pa­rá­me­tros adecuados. Para filtrar por el tamaño de un archivo, uti­li­za­mos el parámetro “-size” seguido de una es­pe­ci­fi­ca­ción de tamaño.

El siguiente comando find devuelve archivos que tienen un tamaño mínimo de 700 megabytes:

find . -size +700M
Nota

El filtrado por tamaño solo funciona para los archivos. Para los di­re­c­to­rios, no se almacena el tamaño en el sistema de datos. En su lugar, el tamaño se puede calcular re­cu­r­si­va­me­n­te si es necesario.

Las es­pe­ci­fi­ca­cio­nes de tamaño consisten en un número seguido de una unidad. A co­n­ti­nua­ción, pre­se­n­ta­mos un resumen de las unidades di­s­po­ni­bles:

Unidades Ex­pli­ca­ción
c Bytes
k Kilobytes
M Megabytes
G Gigabytes
b 512-byte bloques

La es­pe­ci­fi­ca­ción del tamaño se in­te­r­pre­ta como el tamaño exacto del archivo. Esto rara vez es práctico, porque a menudo no se conoce el tamaño exacto de un archivo buscado. Lo que sí es práctico es la re­s­tri­c­ción a un de­te­r­mi­na­do rango de tamaños. Para ello, el número va precedido de un mo­di­fi­ca­dor opcional:

Mo­di­fi­ca­dor Ex­pli­ca­ción
+ El archivo es mayor que el tamaño indicado
- El archivo es más pequeño que el tamaño indicado

El siguiente comando pro­po­r­cio­na archivos de menos de 500 megabytes:

find . -size -500M

El siguiente comando pro­po­r­cio­na archivos cuyo tamaño oscila entre 400 y 500 megabytes.

find . -size +400M -and -size -500M

Además de es­pe­ci­fi­car un tamaño exacto o un rango de tamaños, “-empty” es un parámetro in­de­pe­n­die­n­te para buscar archivos vacíos:

find . -type f -empty

Este comando también funciona para los di­re­c­to­rios:

find . -type d -empty

Utilizar el comando find de Linux para filtrar por marca de tiempo

El sistema operativo gestiona el sistema de archivos y registra cuándo se ha accedido a los archivos. En el proceso se generan varias marcas de tiempo. Linux crea marcas de tiempo para la creación, la última mo­di­fi­ca­ción y el último acceso a un archivo. Usando el comando find, podemos filtrar y encontrar estas marcas de tiempo. Aquí hay un resumen de los pa­rá­me­tros de búsqueda más uti­li­za­dos:

Parámetro de búsqueda Ex­pli­ca­ción
-ctime, -cmin Filtrar por fecha de creación
-mtime, -mmin Filtrar por fecha de mo­di­fi­ca­ción
-atime, -amin Filtrar por fecha de acceso

Para encontrar los archivos que se mo­di­fi­ca­ron hace apenas un día, uti­li­za­mos el parámetro de búsqueda “-mtime” seguido del valor “1”:

find . -type f -mtime 1

Los pa­rá­me­tros de búsqueda mostrados con “time” en el nombre in­te­r­pre­tan el siguiente valor como el número de días. Los pa­rá­me­tros con “min” en el nombre in­te­r­pre­tan el siguiente valor como el número de minutos.

Al igual que al filtrar por tamaño de archivo, aquí también podemos limitar el número de días pasados a un rango. De nuevo, los signos más y menos se utilizan como mo­di­fi­ca­do­res:

Modificad0r Ex­pli­ca­ción
+ La fecha es de hace más días que la es­pe­ci­fi­ca­da
- La fecha es de hace menos días que la es­pe­ci­fi­ca­da

Para encontrar archivos creados hace más de 100 días uti­li­za­mos el parámetro de búsqueda “-ctime” seguido del valor “+100”:

find . -type f -ctime +100

Al igual que al filtrar por tamaño de archivo, los pa­rá­me­tros de búsqueda pueden co­m­bi­nar­se para cubrir un rango. Para encontrar los archivos a los que se accedió hace entre tres y cinco días, uti­li­za­mos el parámetro de búsqueda “-atime” dos veces, cada una con los valores “+2” y “-6”. La co­m­bi­na­ción explícita mediante el parámetro “-and” es opcional:

find . -type f -atime +2 -and -atime -6

Para encontrar los archivos cuyos cambios tienen menos de cinco minutos de an­ti­güe­dad, uti­li­za­mos la búsqueda “-mmin” con el valor “-5”:

find . -type f -mmin -5

Utilizar el comando find de Linux para filtrar por pro­pie­ta­rio, grupo y derechos de acceso

En Linux, cada archivo tiene asignado un usuario que actúa como pro­pie­ta­rio. Además, cada archivo pertenece a un de­te­r­mi­na­do grupo de usuarios. En base a esto, se definen ciertos derechos de acceso (permisos) para cada archivo. En base a toda esta in­fo­r­ma­ción, podemos utilizar el comando find para filtrar y encontrar archivos en Linux. A co­n­ti­nua­ción, pre­se­n­ta­mos un resumen de los pa­rá­me­tros de búsqueda uti­li­za­dos:

Parámetro de búsqueda Ex­pli­ca­ción
-user Filtrar por pro­pie­ta­rio
-group Filtrar por grupo
-perm Filtrar por derechos de acceso

Para buscar los archivos propiedad del usuario raíz, uti­li­za­mos el parámetro de búsqueda “-user” seguido del valor “root”:

find . -user root

Para buscar los archivos propiedad del propio usuario, uti­li­za­mos el parámetro de búsqueda “-user” seguido de la expresión “$(whoami)”. Esta última se resuelve con el nombre del usuario conectado:

find . -user $(whoami)

Para buscar más archivos que pe­r­te­ne­z­can al grupo admin, uti­li­za­mos el parámetro de búsqueda “-group” seguido del valor “admin”:

find . -group admin

Además de filtrar por pro­pie­ta­rio y grupo, también es posible filtrar por derechos de acceso. Para ello se utiliza un triplete de números octales. Los valores más fre­cue­n­tes son “644”, “755”, etc. El primer número define los derechos de acceso para el pro­pie­ta­rio, el segundo para el grupo y el tercero para otros usuarios. Cada uno de los tres números octales se crea sumando los derechos in­di­vi­dua­les. Ex­pli­ca­mos exac­ta­me­n­te cómo funciona esto con más detalle en nuestro artículo sobre la asi­g­na­ción de permisos de di­re­c­to­rio con chmod.

Para encontrar archivos to­ta­l­me­n­te ac­ce­si­bles para cualquier usuario, uti­li­za­mos el parámetro de búsqueda “-perm” seguido del valor “777”:

find . -perm 777

Para encontrar archivos a los que solo puede acceder el pro­pie­ta­rio, uti­li­za­mos el parámetro de búsqueda “-perm” seguido del valor “700”:

find . -perm 700

También podemos utilizar el comando find para encontrar archivos en Linux que tengan, como mínimo, los permisos es­pe­ci­fi­ca­dos. Para ello, an­te­po­ne­mos in­me­dia­ta­me­n­te el número octal con un signo menos:

find . -perm -007

Li­mi­ta­ción de la pro­fu­n­di­dad de recursión del comando find de Linux

No­r­ma­l­me­n­te, el comando find de Linux recorre re­cu­r­si­va­me­n­te todos los su­b­di­re­c­to­rios. Sin embargo, a menudo es útil limitar la pro­fu­n­di­dad de la recursión. Para ello, uti­li­za­mos los pa­rá­me­tros de búsqueda “-maxdepth” y “-mindepth”:

Parámetro de búsqueda Ex­pli­ca­ción
-maxdepth Pro­fu­n­di­dad máxima de recursión
-mindepth Pro­fu­n­di­dad de recursión mínima

Para encontrar los archivos de más de 50 megabytes, in­clu­ye­n­do solo los di­re­c­to­rios que no están a más de dos niveles de pro­fu­n­di­dad que el di­re­c­to­rio actual, uti­li­za­mos el siguiente comando:

find . -type f -maxdepth 2 -size +50M

Para encontrar los archivos que son mayores de 50 megabytes, in­clu­ye­n­do solo los di­re­c­to­rios que están al menos tres niveles y no más de cinco niveles más profundos que el di­re­c­to­rio actual, uti­li­za­mos el siguiente comando:

find . -type f -mindepth 3 -and -maxdepth 5 -size +50M

Utilizar el comando find de Linux para encontrar y procesar archivos

Hasta ahora nos hemos limitado a encontrar archivos en Linux. Sin embargo, muchos casos requieren un pro­ce­sa­mie­n­to masivo de los archivos en­co­n­tra­dos. Los es­ce­na­rios comunes incluyen la re­pa­ra­ción de los derechos de acceso para el software basado en la web como WordPress o la eli­mi­na­ción de archivos después de un hackeo. También re­cu­rri­mos al comando find para estos casos.

A co­n­ti­nua­ción, veamos el patrón general para ejecutar un comando para cada archivo en­co­n­tra­do. Para ello uti­li­za­mos el parámetro “-exec”, seguido de un comando Linux y sus pa­rá­me­tros. Todo el comando siempre se termina con el texto constante “{} \;”:

find <directory_path> <find_parameter> -exec <command_and_parameter> {} \;

Ten en cuenta que la ejecución del comando se produce sin preguntar. De­pe­n­die­n­do de los pa­rá­me­tros de búsqueda se­le­c­cio­na­dos y del comando dado, la ejecución del comando find con el parámetro “-exec” puede causar graves daños al sistema.

Para limitar el riesgo, existe el parámetro “-ok” que es similar al parámetro “-exec”. Esto fuerza la co­n­fi­r­ma­ción in­ter­ac­ti­va del pro­ce­sa­mie­n­to de cada archivo in­di­vi­dual en­co­n­tra­do:

find <directory_path> <search_parameter> -ok <command_and_parameter> {} \;

Como pre­cau­ción, limitamos la pro­fu­n­di­dad de la recursión a un solo su­b­di­re­c­to­rio mediante “-maxdepth 1” en los si­guie­n­tes ejemplos.

Nota

Pre­cau­ción: ten cuidado con los si­guie­n­tes ejemplos. Te re­co­me­n­da­mos en­ca­re­ci­da­me­n­te que crees tu propia carpeta para probarlos. Cambia a esta carpeta antes de ejecutar los ejemplos para ase­gu­rar­te de no dañar tu sistema.

Utilizar el comando find de Linux para ajustar el usuario y los grupos

Para es­ta­ble­cer el pro­pie­ta­rio y el grupo de todos los archivos y di­re­c­to­rios al valor “www-data” uti­li­za­mos el siguiente comando find con el comando chown:

find . -maxdepth 1 -exec chown www-data:www-data {} \;

Utilizar el comando find de Linux para ajustar los derechos de archivos

Para encontrar archivos con derechos “777” y ponerlos en “664” uti­li­za­mos el siguiente comando find con el comando chmod:

find . -type f -maxdepth 1 -perm 777 -exec chmod 664 {} \;

Para es­ta­ble­cer los permisos de todos los di­re­c­to­rios a “755”, uti­li­za­mos el siguiente comando find con el comando chmod:

find . -type d -maxdepth 1 -exec chmod 755 {} \;

Utilizar el comando find de Linux para eliminar di­re­c­to­rios y archivos vacíos

También puedes utilizar el comando find para borrar los archivos y di­re­c­to­rios en­co­n­tra­dos. Como pre­cau­ción, mo­s­tra­re­mos esto aquí solo para archivos y di­re­c­to­rios vacíos. Además, en lugar del parámetro “-exec”, uti­li­za­mos el parámetro “-ok” para obligar al usuario a aceptar ex­plí­ci­ta­me­n­te el borrado.

Para eliminar todos los di­re­c­to­rios de Linux vacíos uti­li­za­mos el siguiente comando find junto con el comando rmdir:

find . -type d -maxdepth 1 -empty -ok rmdir {} \;

Para borrar todos los archivos vacíos de Linux, uti­li­za­mos el siguiente comando find con el comando rm:

find . -type f -maxdepth 1 -empty -ok rm {} \;
Ir al menú principal