Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Linux Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

El comando find de Linux es una potente herramienta que permite a los administradores del sistema localizar y gestionar archivos y directorios basándose en una amplia gama de criterios de búsqueda. Puede encontrar directorios y archivos por su nombre, su tipo o extensión, tamaño, permisos, etc.

Además de localizar archivos y directorios, la combinación del comando find con otros le permite realizar acciones sobre los resultados. Añadir la opción -exec permite a los administradores ejecutar comandos externos y realizar acciones como copiar, mover, eliminar o cambiar los permisos de los archivos que coincidan con los criterios especificados, como el tamaño, el nombre, etc.

En este artículo, comenzaremos explicando los comandos find básicos de Linux con ejemplos. Esto le mostrará cómo encontrar archivos y directorios. A continuación, le mostraremos cómo utilizar la opción -exec para actuar sobre los archivos o directorios en función de su tamaño, permisos, etc.

La sintaxis general del comando find es

find {ruta} {nombre -del-archivo o dir-a-buscar} {acción

a tomar}
Dónde

  • path especifica el directorio
  • nombre-del-archivo o directorio-a-buscar : Nombre del archivo o directorio a buscar
  • acción-a-tomarcomo copiar, borrar, mover, etc.

En este tutorial, explicaremos cómo localizar archivos y directorios que coincidan con patrones especificados. También veremos cómo realizar acciones sobre los archivos o directorios que localiza el comando find. La guía está basada en Ubuntu pero es aplicable a la mayoría de distribuciones y versiones de Linux

Encontrar archivos y directorios

Encontrar archivos específicos por nombre o extensión

Para buscar un archivo específico, ejecute el siguiente comando desde la raíz (/). El comando contiene el nombre exacto del archivo que está buscando

buscar .

nombre archivo22.txt

Salida

./test/fichero22.txt
./ventas/fichero22.txt

Tenga en cuenta que los resultados incluyen la ruta. Esto es importante si no conoce el directorio en el que se encuentra el archivo, o cuando se encuentra en más de un lugar

También puede buscar el archivo en otro directorio mientras sigue en la ubicación actual. En este caso, debe proporcionar la ruta del directorio en el que desea buscar

find ./prueba -nombre archivo22.txt

Buscar archivos específicos en otro directorio

En nuestro caso, buscaremos todos los que empiecen por las letras archivo en el directorio test
find .

/prueba

-nombre archivo*
Salida
.

/test/archivo22.txt
./test/archivo30.doc
./test/archivo1.txt
./test/archivo5,doc

Buscar archivos por extensión

Para buscar un archivo en Linux con una extensión determinada, añádala al comando

buscar .

nombre *.

txt
Salida

./test/subtest/subfil.txt
./test/fichero22.txt
./test/fichero1.txt
./home1/ficheros32.txt
./home2/fichero22.txt
./qa/tags.txt

Buscar archivos y directorios por nombre

Utilice el siguiente comando para buscar archivos y directorios que empiecen por las letras qa. En nuestro ordenador, tenemos los archivos qatree.txt y qa.txt, así como un directorio con el nombre qa

Si ejecutamos el comando

find ./ -name "qa*"

Nos devuelve la siguiente salida
.

/test/qatree.pdf
./test/qa.txt
./home/qa

El comando devuelve tanto los archivos como los directorios que coinciden con los criterios de búsqueda. Para buscar sólo archivos o directorios, debe especificarlo en el comando

Buscar sólo archivos o directorios

Para buscar sólo archivos, utilice el modificador type f

Sóloarchivos

find ./ -type f -name "qa*"

Salida
.

/test/qatree.pdf
./test/qa.txt

Sólo directorios

Añada la opción de tipo d para localizar sólo directorios

find ./ -type d -name "qa*"

Salida

./home/qa

Comando find insensible a mayúsculas y minúsculas

Todas las búsquedas con el modificador -nombre distinguen entre mayúsculas y minúsculas y no dan resultados con mayúsculas. Para obtener todos los casos, utilice la opción -iname

find ./ -iname "qa*"

Salida
.

/test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Buscar un archivo en varios directorios

Para buscar los archivos en diferentes directorios, añada sus rutas en el comando. En nuestro caso, buscaremos en los directorios test y numérico

find ./test ./numeric -name fichero22.txt -type f

Salida
./test/fichero22.txt


/root/numeric/fichero22
.txt

Encontrar varios archivos con diferentes extensiones de todos los directorios

Puede utilizar el comando find para localizar múltiples archivos que compartan las diferentes extensiones como *.doc, *.txt *.pdfetc. Esto puede hacerse por separado, una extensión cada vez, o utilizando un solo comando que incluya todas las extensiones deseadas

buscar .tipo f ( -nombre "*.txt" -o -nombre "*.pdf" -o -nombre "*.doc" )

salida

./prueba/subprueba/subfil.txt
./prueba/qatree.pdf
./prueba/archivo22.txt
./prueba/qa.txt
./prueba/archivo30.doc
./libros/acro.pdf
./datos1/Archivo22.txt
./docs/archivo32.txt

Buscar archivos que contengan un texto determinado

A veces, desea acceder a un archivo que contiene cierto texto pero no puede recordar su nombre o ubicación. Este comando le permite encontrar todos los archivos que contienen el texto deseado

Para buscar todos los archivos que contengan la palabra hiperconvergencia", utilice

find / -type f -exec grep -l -i "hiperconvergencia" {}

Salida

/root/numérico/hci

/root/HCIP
La opción -i permite al comando ignorar mayúsculas y minúsculas y encontrará el texto tanto si está en mayúsculas como si no, es decir, hiperconvergencia, Hiperconvergencia , etc

Para buscar los archivos en un directorio específico, basta con añadirlo a la orden

find ./numeric -type f -exec grep -l -i "hiperconvergencia" {}

Salida
.

/numérico/hci

Más información ejemplos del comando grep

Buscar archivos y directorios en función de su tamaño

Puede encontrar todos los archivos o directorios que sean menores, iguales o mayores que un determinado tamaño, que estén dentro de un determinado rango o que estén vacíos. Utilice el formato de tamaño adecuado en función del tipo de archivos o directorios que esté buscando

Las opciones de tamaño incluyen

c - bytes

k - kilobytes

M - Megabytes

G - Gigabytes

Buscar archivos de un tamaño determinado - igual a 30MB

Para buscar encontrar todos los archivos de 30MB

buscar / -tamaño 30M

Encontrar archivos mayores de un tamaño especificado

encontrar

-tamaño

2M
Salida

.
/Descargas/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Buscar archivos de menos de 10 MB en el directorio actual

encontrar .

tipo f -tamaño -10M

Encontrar archivos con tamaños entre 100-200MB

Cuando busque archivos dentro de un rango específico como entre 100 y 200 MB
find

/ -tamaño 100M -tamaño -200M

Buscar directorios con un tamaño superior a 20kb

find / -type d -size 20k

Buscar archivos y directorios vacíos

Archivos

find ./ -type f -size 0

o
find ./ -type f

-empty

Directorios
find

./ -

tipo d -vacío

Encontrar archivos por antigüedad o tiempo de modificación

Buscar archivos con más de n días de antigüedad
find

/ruta/ -type f -name '*.txt' -mtime 8

La opción -mtime 8 buscará archivos txt que tengan más de 8 días de antigüedad

Por fecha de modificación

Esto buscará archivos modificados en las últimas 17 horas

buscar . 

-mtime

-17 -type f 

Busca directorios modificados en los últimos 10 días

buscar . 

-mtime

-10 

-tipo d

Buscar archivos en función de su acceso o modificación

Busca archivos basándose en la fecha o la hora de acceso. Esto le permite ver los archivos a los que se ha accedido o no dentro de un periodo especificado

Para ver los archivos a los que no se ha accedido en los últimos 10 días en el directorio home

find /home -atime 10

Archivos a los que se accedió hace exactamente 10 días
find

/home -

atime 10
A los que se ha accedido en los últimos 10 días
find /home -atime

-10

Buscar archivos modificados en los últimos n días

También puede buscar los archivos del directorio /home modificados en los últimos 10 días utilizando el comando
encontrar /home

-mtime -10 

Buscar archivos modificados en un periodo determinado

Por ejemplo, todos los ficheros modificados hace entre 6 y 15 días en el directorio home
encontrar /home

-type f -mtime 6 -mtime -15

Archivos y directorios a los que se ha accedido en los últimos 10 minutos

Para encontrar los archivos a los que se ha accedido en los últimos 10 minutos, utilice la opción -amin

find .

-amin

-10 -

type f
Salida

./.bash_history
./.profileroot@ubuntu1804:~#

Directorios a los que se ha accedidoen los últimos 10 minutos

find .

amin -10 -type

d

Encontrar archivos que coincidan con permisos específicos

Sintaxis

$ find -perm modo

Donde modo es el permiso que puede ser numérico como 644, 655, 700, 777, etc, o letras como u=x, a=r x, etc

Puede especificar el modo de las tres maneras siguientes

  1. Sin prefijo cuando desee encontrar archivos con los permisos exactos especificados.
  2. Con "-" para archivos con al menos el permiso especificado. Esto devuelve archivos con el permiso especificado así como con permisos adicionales superiores.
  3. Utilizando "/" se requiere especificar el propietario o grupo con el permiso del fichero.

Buscar archivos con permiso 777

find -perm 777

Salida

./archivo1

Encontrar archivos con al menos 766
buscar -perm -766

Salida
.

/archivo2
./archivo1

El comando busca todos los archivos en los que el

  • El propietario del archivo tiene permisos de lectura/escritura/ejecución.
  • El grupo tiene permisos de lectura/escritura
  • Otros tienen permisos de lectura/escritura

Como tal, devuelve dos archivos que cumplen este criterio - archivo1 y archivo2. No es necesario que los ficheros tengan exactamente los 766 permisos y pueden tener otros adicionales siempre y cuando pero deben tener al menos los especificados

Buscar archivos con permiso de escritura del propietario

Utilizaremos ahora el "/" para buscar ficheros escribibles por su propietario, o grupo, u otros

find -perm /222
.
./archivo2
./archivo3
./archivo1

Lo anterior busca archivos que puedan ser escritos por su propietario o grupo
Esto devuelve archivos que son escribibles por cualquiera de los dos pero no necesariamente por ambos. Para ver los archivos en los que ambos tienen permisos de escritura, utilice el prefijo -.

find -perm -220

Salida

./archivo2
./archivo1

Encontrar archivos propiedad de un usuario

Buscar todos los archivos propiedad de Jack

find /home -usuario jack

Salida

/home/jack

/home/jack/ejemplos

.desktop

/home/jack/

.gnupg

/home/jack/

.gnupg/private-keys-v1.d

/home/jack/ans

.cgi

Encontrar archivos específicos propiedad de un usuario

Encontrar todos los archivos de texto propiedad de Jack

find /home -user jack -iname "*.txt"

Salida

/home/jack/docs/archivo32.t

xt

Encontrar y listar archivos y directorios junto con sus permisos

find -nombre "*.conf"

|

ls -l

Salida

total 120
drwxr-xr-x 2 root root 4096 31 dic 13:19 backup2
drwxr-xr-x 2 root root 4096 4 ene 11:57 Escritorio
drwxr-xr-x 2 root root 4096 31 dic 11:50 Documentos
drwxr-xr-x 2 root root 4096 31 dic 12:27 Descargas
-rw-r--r-- 1 root root 0 4 ene 12:02 archivo22.doc
drwxr-xr-x 2 root root 4096 Ene 4 12:14 file23

-rw-r-r-

1 root root 0 Ene 4 12:23 file23.txt

Busque los resultados y actúe en consecuencia

En esta sección, veremos cómo puede actuar sobre los archivos que coincidan con el patrón especificado en el comando find

Encontrar archivos y cambiar permisos

Encuentre y cambie los permisos de determinados tipos de archivos. En nuestro caso, trabajaremos con archivos PHP con diferentes permisos como se muestra a continuación

jack@ubuntu1804:~/ver$ ls -la

total 8
drwxrwxr-x 2 jack jack 4096 Ene 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Ene 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Ene 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Ene 3 14:11 base.php

-rwxr-xr-x 1 jack jack 0 Ene 3 14:06

query.php

-rw-rw-r- 1 jack jack 0 Ene 3 14:11

qust.php

-rwxr-xr-x 1 jack jack 0 3 de enero

14:06 text.php

-rw-rw-r- 1 jack jack 0 Ene 3

14:11 vary.php

Ahora buscaremos todos los archivos PHP (arriba) y sustituiremos sus permisos por 755

find ver -name "*.php" -type f -exec chmod 755 {}

El comando busca los archivos PHP en el directorio ver y luego establece su permiso en 755(rwxr-xr-x)

Resultados

jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Ene 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Ene 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Ene 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Ene 3 14:11 base.php

-rwxr-xr-x 1 jack jack 0 Ene 3 14:06

query.php

-rwxr-xr-x 1 jack jack 0

Jan 3 14:11 qust.php

-rwxr-xr-x 1 jack jack 0 3 de enero

14:06 text.php

-rwxr-xr-x 1 jack 0 3 de enero

14:11 vary.php

Buscar y cambiar los permisos de archivos y directorios

Encuentre archivos con permisos 644 y cámbielos para que tengan permisos 655

encontrar .

type f -perm 644 -exec chmod 655 {}

También puede buscar directorios con permisos 644 y sustituirlos por 755

encontrar .

-tipo d -perm

644

Salida

./docs 

La carpeta docs tiene permisos 644

drwxrwxr-x 2 jack jack 4096 3 de enero 12:45 doc

s
Para establecerlo en 755, ejecutamos

find .

type d -perm 644 -exec chmod 755 {}

Ahora podemos comprobar de nuevo qué es exactamente 755

find .

-tipo d -perm

755

Salida

./docs

De lo anterior podemos ver que los directorios root y docs tienen los permisos 755

El comando Ls -la da los siguientes detalles

drwxr-xr-x 2 jack jack 4096 Ene 3 12:45

docs

Buscar y copiar archivos o directorios

Buscar y copiar un archivo específico en undirectorio

El siguiente comando encontrará el archivo file22.txt y lo copiará en el directorio ~/tmp/images

find -iname archivo22.txt -exec cp {} ~/tmp/imágenes

Encontrar y copiar un tipo de archivos en un directorio

Para encontrar archivos como imágenes con extensión jpg en el directorio actual y copiarlos a una ubicación diferente como una carpeta de imágenes, utilice

find -iname '*.jpg' -exec cp {} ~/tmp/images

Esto encontrará y copiará todos los archivos jpg a la carpeta ~/tmp/images

Encontrar y copiar un archivo en varios directorios

Encuentre y copie un único archivo a varios directorios

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {}

Esto encontrará el archivo hci y lo copiará en los tres directorios de /tmp/dir1/ /tmp/dir2/ y $HOME/3/

Encontrar y mover archivos a un directorio diferente

Para mover un archivo conocido de un directorio a otro. Para mover el archivo universal.php

find ~/carpeta/ -type f -name universal.php -exec mv {} ~/numeric/

Buscar y mover archivos con una extensión determinada a una carpetadiferente
find

~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/

Buscar determinados archivos y moverlos a una carpeta diferente específica

find

-type f -name uni*.* -exec mv {} ~/unifiles/

El comando busca todos los archivos cuyos nombres empiecen por uni y tengan cualquier extensión. A continuación, los mueve al directorio /unifiles/

Buscar y mover archivos en función de la antigüedad

Encuentra y mueve los ficheros con una antigüedad superior a los días especificados a una ubicación diferente, como el archivo

find /ruta/ -type f -name '*.pdf' -mtime 20 -exec mv {} /backup1/

Esto buscará archivos pdf con más de 20 días de antigüedad y los moverá al directorio backup1

Buscar y eliminar archivos y directorios

La sintaxis para buscar y eliminar archivos o directorios en el directorio actual es

buscar .type f -name "archivo a eliminar" -exec rm -f {} ; para eliminar sólo archivos o

find . -tipo d -nombre "dir-to-delete" -exec rm -rf {} ; para borrar directorios solamente

Buscar y eliminar sólo archivos específicos

Para buscar y eliminar archivos que empiecen por til, utilice

find . 

type f -name "til*" 

-exec rm {}
Para buscar y eliminar directorios que empiecen por til

find .

-tipo d -nombre "til*" -exec rm {}

Eliminar tanto archivos como directorios

encontrar . 

-nombre "til*" -exec rm

-rf 

{}
Esto eliminará tanto los archivos como los directorios que empiecen por las letras til

Eliminar por extensión

A continuación le mostramos cómo puede localizar y eliminar todos los archivos txt del directorio actual. Sustituya el txt por otra extensión como bak, pdf o cualquier otra que desee eliminar

buscar .

type f -name "*.txt" -exec rm -f {}

En caso de que desee que el sistema le pida confirmación antes de eliminar cada archivo, añada la opción -i como se indica a continuación

buscar .

-escriba f

-nombre "*.txt" -exec rm -i

{}
Salida

rm: ¿eliminar archivo vacío regular './Archivo22.txt'? y

rm: ¿eliminar

archivo vacío regular './Archivo22.txt'? y

rm

: ¿eliminar archivo vacío regular './Archivo23.txt'?

Por defecto, la opción -rm no eliminará los directorios y deberá utilizar la opción -r para garantizar una eliminación recursiva. Esto asegura la eliminación de los directorios vacíos y de los que contienen archivos. La opción -f fuerza la eliminación y se utiliza tanto para los archivos como para los directorios

Buscar y eliminar archivos de más de n días

Encuentra y elimina los archivos de copia de seguridad con más de 20 días de antigüedad del directorio actual

buscar .

tipo f -nombre '*.bak' -mtime 20 -exec rm {}

Esto borrará todos los archivos .b ak con más de 20 días de antigüedad

Encontrar y borrar directorios solamente

Para borrar un directorio llamado dir22

buscar .

escriba d -name dir22 -exec rm -rf {}

Asegúrese de distinguir entre mayúsculas y minúsculas en el nombre del directorio o utilice la opción -iname

encontrar .

-tipo d -nombre dir22 -exec rm

-rf {}

Elimina tanto Dir22 como dir22

Para confirmar antes de la eliminación, utilice la opción -i

find .

-tipo d -nombre Dir22 -exec rm

-rf -i

{}
Salida
rm: ¿eliminar directorio './Dir22'? n
rm: ¿eliminar directorio './dir22'? y

En nuestro caso, hemos tecleado n para el directorio Dir22 que no será eliminado e y para el dir22 que ahora será eliminado

Buscar y eliminar archivos vacíos

Puede utilizar cualquiera de los siguientes comandos para localizar archivos vacíos y eliminarlos automáticamente

find ./ -type f -size 0 -exec rm -f {}

o
find ./ -type f -size 0 | xargs rm -f
o
find ./ -type f -size 0 -delete

Encontrar y eliminar directorios vacíos

Para eliminar directorios vacíos utilizaremos la opción d

find ./ -type d -empty -exec rmdir {}

Otra alternativa es utilizar delete en lugar de remove
find ./ -type d -empty

-delete

Tenga en cuenta que borrar archivos críticos o del sistema de su ordenador puede dañar el sistema operativo o las aplicaciones o provocar la pérdida de sus datos importantes.

Para evitar borrados accidentales, la mejor práctica es utilizar una cuenta de usuario no root. Además, asegúrese de que está borrando los archivos correctos que no son útiles y de que tiene una copia de seguridad de todos sus archivos de datos por si acaso

¿Y ahora qué?

Siga adelante y pruebe los comandos find de Linux anteriores en su entorno de laboratorio o NO PRODUCCIÓN. Vea si puede utilizar algunos para automatizar la limpieza del sistema de archivos con Crontab. Y, para dominar Linux, eche un vistazo a este curso en línea.

  • Amos Kingatua
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre Linux
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder