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 directorionombre-del-archivo
o directorio-a-buscar : Nombre del archivo o directorio a buscaracción-a-tomar
como 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
*.pdf
etc. 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
- Sin prefijo cuando desee encontrar archivos con los permisos exactos especificados.
- Con "
-
" para archivos con al menos el permiso especificado. Esto devuelve archivos con el permiso especificado así como con permisos adicionales superiores. - 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.