El comando de búsqueda de Linux es una poderosa herramienta que permite a los administradores de sistemas ubicar y administrar archivos y directorios en función de 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, combinar el comando de búsqueda con otros le permite tomar medidas sobre los resultados. Agregar la opción -exec permite a los administradores de sistemas ejecutar comandos externos y realizar acciones como copiar, mover, eliminar o cambiar los permisos de los archivos que coinciden con los criterios especificados, como el tamaño, el nombre, etc.
En este artículo, comenzaremos explicando los comandos básicos de búsqueda de Linux con ejemplos. Esto le mostrará cómo encontrar archivos y directorios. Luego le mostraremos cómo usar la opción -exec para actuar sobre los archivos o directorios según su tamaño, permisos, etc.
La sintaxis general para el comando de búsqueda es
find {path} {name -of-file or dir-to-search} {action-to-take}
Dónde,
- ruta especifica el directorio.
- name-of file or dir-to-search : Nombre del archivo o directorio a buscar
- acción a realizar: como copiar, eliminar, mover, etc.
En este tutorial, explicaremos cómo localizar archivos y directorios que coincidan con patrones específicos. También veremos cómo realizar acciones sobre los archivos o directorios que localiza el comando find. La guía se basa en Ubuntu pero es aplicable a la mayoría de las distribuciones y versiones de Linux.
Tabla de contenido
Buscar archivos y directorios
Encuentra 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.
find . -name file22.txt
Producción
./test/file22.txt ./sales/file22.txt
Tenga en cuenta que los resultados incluyen la ruta. Esto es importante si no conoce el directorio donde se encuentra el archivo o cuando se encuentra en más de un lugar.
También puede buscar el archivo en otro directorio mientras aún se encuentra en la ubicación actual. En este caso, debe proporcionar la ruta del directorio donde desea buscar.
find ./test -name file22.txt
Buscando archivos específicos en otro directorio
En nuestro caso, buscaremos todos aquellos que comiencen con el archivo de letras en el directorio de prueba.
find ./test -name file*
Producción
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Buscar archivos por extensión
Para encontrar un archivo en Linux con cierta extensión, agréguelo al comando.
find . -name *.txt
Producción
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Buscar archivos y directorios por nombre
Use el siguiente comando para buscar archivos y directorios que comiencen con las letras qa. En nuestra computadora, tenemos los archivos qatree.txt y qa.txt, así como un directorio con el nombre qa.
Si ejecutamos el comando;
find ./ -name "qa*"
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 archivos o directorios únicamente, debe especificarlo en el comando.
Buscar archivos o directorios solamente
Solo para archivos, use el interruptor tipo f.
Solo archivos
find ./ -type f -name "qa*"
Producción
./test/qatree.pdf ./test/qa.txt
Solo directorios
Agregue la opción de tipo d para localizar directorios solamente.
find ./ -type d -name "qa*"
Producción
./home/qa
Comando de búsqueda que no distingue entre mayúsculas y minúsculas
Todas las búsquedas con el cambio de nombre distinguen entre mayúsculas y minúsculas y no darán resultados con letras mayúsculas. Para obtener todos los casos, use la opción -iname.
find ./ -iname "qa*"
Producción
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Buscar un archivo en varios directorios
Para encontrar los archivos en diferentes directorios, agregue sus rutas en el comando. En nuestro caso, comprobaremos en los directorios de prueba y numéricos.
find ./test ./numeric -name file22.txt -type f
Producción
./test/file22.txt /root/numeric/file22.txt
Encuentre múltiples archivos con diferentes extensiones de todos los directorios
Puede usar el comando de búsqueda para ubicar varios archivos que comparten las diferentes extensiones, como *.doc, *.txt *.pdf, etc. Esto se puede hacer por separado, una extensión a la vez, o usando solo un comando que incluye todos las extensiones deseadas.
encontrar . -tipo f ( -nombre “*.txt” -o -nombre “*.pdf” -o -nombre “*.doc” )
producción
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Buscar archivos que contengan cierto texto
A veces, desea acceder a un archivo que contiene cierto texto pero no puede recordar su nombre de archivo o ubicación. Este comando le permite encontrar todos los archivos que contienen su texto de destino.
Para buscar todos los archivos que contengan la palabra hiperconvergencia”, utilice;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Producción
/root/numeric/hci /root/HCIP
La opción –i permite que el comando ignore los casos y encontrará el texto en mayúsculas o no, es decir, hiperconvergencia, Hiperconvergencia, etc.
Para buscar los archivos en un directorio específico, simplemente agréguelos al comando
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Producción
./numeric/hci
Explore más ejemplos de comandos grep.
Buscar archivos y directorios según el tamaño
Puede encontrar todos los archivos o directorios que son más pequeños, iguales o mayores que un tamaño determinado, dentro de un rango determinado o vacíos. Utilice el formato de tamaño adecuado según el tipo de archivos o directorios que esté buscando.
Las opciones de tamaño incluyen;
c-bytes
k – kilobytes
M – Megabytes
G – Gigabytes
Encuentre archivos de cierto tamaño, igual a 30 MB
Para buscar encontrar todos los archivos de 30 MB
find / -size 30M
Encuentra archivos más grandes que un tamaño especificado
find -size +2M
Producción
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Encuentra archivos de menos de 10 MB en el directorio actual
find . -type f -size -10M
Encuentra archivos con tamaños entre 100-200 MB
Al buscar archivos dentro de un rango específico, como entre 100 y 200 MB
find / -size +100M -size -200M
Busque directorios de más de 20 kb
encontrar / -tipo d -tamaño +20k
Encuentra archivos y directorios vacíos.
archivos
encontrar ./ -tipo f -tamaño 0
o
find ./ -type f –empty
directorios
find ./ -type d –empty
Encuentre archivos por edad o tiempo de modificación
Buscar archivos de más de n días
find /path/ -type f -name '*.txt' -mtime +8
El -mtime +8 buscará archivos txt que tengan más de 8 días.
Por fecha de modificación
Esto buscará archivos modificados en las últimas 17 horas.
find . -mtime -17 -type f
Busca directorios modificados en los últimos 10 días
find . -mtime -10 -type d
Buscar archivos según el acceso o la modificación
Encuentre archivos según la fecha o la hora de acceso. Esto le permite ver archivos a los que se ha accedido o no dentro de un período específico.
Para ver los archivos a los que no se ha accedido en los últimos 10 días en el directorio de inicio.
find /home -atime +10
Archivos accedidos hace exactamente 10 días
find /home -atime 10
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 en el directorio /home modificados en los últimos 10 días usando el comando;
find /home -mtime -10
Encuentra archivos modificados dentro de un período específico.
Por ejemplo, todos los archivos modificados hace entre 6 y 15 días en el directorio de inicio.
find /home -type f -mtime +6 -mtime -15
Archivos y directorios accedidos en los últimos 10 minutos
Para encontrar los archivos a los que se accedió en los últimos 10 minutos, use la opción -amin.
find . -amin -10 -type f
Producción
./.bash_history ./[email protected]:~#
Directorios accedidos en los últimos 10 minutos
find . -amin -10 -type d
Buscar archivos que coincidan con permisos específicos
Sintaxis
$ find -perm mode
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 siguientes tres formas diferentes.
Buscar archivos con permiso 777
find -perm 777
Producción
./file1
Encuentra archivos con al menos 766
encontrar -perm -766
Producción
./file2 ./file1
El comando busca todos los archivos en los que
- El propietario del archivo tiene permisos de lectura/escritura/ejecución.
- El grupo tiene permisos de lectura/escritura
- Otros tienen permiso de lectura/escritura
Como tal, devuelve dos archivos que cumplen este criterio: archivo1 y archivo2. No es necesario que los archivos tengan los permisos 766 exactos y pueden tener permisos adicionales, pero deben tener al menos los especificados.
Buscar archivos en los que el propietario pueda escribir
Ahora usaremos el «/» para buscar archivos que puedan ser escritos por su propietario, grupo u otros.
find -perm /222 . ./file2 ./file3 ./file1
Lo anterior busca archivos en los que su propietario o grupo puedan escribir.
Esto devuelve archivos en los que cualquiera puede escribir, pero no necesariamente ambos. Para ver archivos, donde ambos tienen permisos de escritura, use el prefijo –.
find -perm -220
Producción
./file2 ./file1
Buscar archivos propiedad de un usuario
Encuentra todos los archivos propiedad de Jack
find /home -user jack
Producción
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Encuentra archivos específicos propiedad de un usuario
Encuentra todos los archivos de texto propiedad de Jack
find /home -user jack -iname "*.txt"
Producción
/home/jack/docs/file32.txt
Encuentre y enumere archivos y directorios junto con sus permisos
find -name "*.conf" | ls -l
Producción
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Encuentre y actúe sobre los resultados
En esta sección, veremos cómo puede actuar sobre los archivos que coinciden con el patrón especificado en el comando de búsqueda.
Buscar archivos y cambiar permisos
Encuentre y cambie los permisos de ciertos tipos de archivos. En nuestro caso, trabajaremos con archivos PHP con diferentes permisos como se muestra a continuación.
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Ahora buscaremos todos los archivos PHP (arriba) y reemplazaremos sus permisos con 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
El comando busca archivos PHP en el directorio ver y luego establece su permiso en 755 (rwxr-xr-x)
Resultados
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 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 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Buscar y cambiar permisos de archivos y directorios
Encuentre archivos con permisos 644 y cámbielos para que tengan permisos 655
find . -type f -perm 644 -exec chmod 655 {} ;
También puede buscar directorios con permisos 644 y reemplazarlos con 755.
find . -type d -perm 644
Producción
./docs
La carpeta docs tiene 644 permisos.
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Para establecerlo en 755, ejecutamos
find . -type d -perm 644 -exec chmod 755 {} ;
Ahora podemos comprobar de nuevo para ver qué es exactamente 755
find . -type d -perm 755
Producción
.
./docs
Desde arriba podemos ver que los directorios raíz y docs tienen los permisos 755.
El comando Ls –la da los siguientes detalles
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Buscar y copiar archivos o directorios
Buscar y copiar un archivo específico en un directorio
El siguiente comando encontrará el archivo file22.txt y lo copiará en el directorio ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Buscar y copiar un tipo de archivos en un directorio
Para buscar archivos como imágenes con extensión jpg en el directorio actual y copiarlos en una ubicación diferente como una carpeta de imágenes, use;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Esto encontrará y copiará todos los archivos jpg en la carpeta ~/tmp/images.
Encuentre y copie un archivo a muchos directorios
Busque y copie uno en 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/
Buscar y mover archivos a un directorio diferente
Para mover un archivo conocido de un directorio a otro. Para mover el archivo universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Busque y mueva archivos con cierta extensión a una carpeta diferente
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Encuentre ciertos archivos y muévase a una carpeta diferente específica
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
El comando busca todos los archivos con nombres que comienzan con uni y que tienen cualquier extensión. Luego los mueve al directorio /unifiles/
Encuentra y mueve archivos según su edad
Busque y mueva archivos con una antigüedad superior a los días especificados a una ubicación diferente, como el archivo.
find /path/ -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
encontrar . -type f -name “archivo a borrar” -exec rm -f {} ; para borrar archivos solamente o
encontrar . -type d -name “dir-to-delete” -exec rm -rf {} ; para borrar directorios solamente
Buscar y eliminar solo archivos específicos
Para buscar y eliminar archivos que comiencen con til, use;
find . -type f -name "til*" -exec rm {} ;
Para buscar y eliminar directorios que comienzan con til
find . -type d -name "til*" -exec rm {} ;
Eliminar archivos y directorios
find . -name "til*" -exec rm -rf {} ;
Esto eliminará tanto los archivos como los directorios que comiencen con las letras til.
Eliminar por extensión
A continuación se muestra cómo puede ubicar y eliminar todos los archivos txt en el directorio actual. Reemplace el txt con otra extensión como bak, pdf o cualquier otra que desee eliminar.
find . -type f -name "*.txt" -exec rm -f {} ;
En caso de que desee que el sistema le pida que confirme antes de eliminar cada archivo, agregue la opción -i como se muestra a continuación.
find . -type f -name "*.txt" -exec rm -i {} ;
Producción
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
De forma predeterminada, -rm no eliminará los directorios y debe usar la opción -r para garantizar una eliminación recursiva. Esto asegura la eliminación de directorios vacíos y aquellos que contienen archivos. La opción -f fuerza la eliminación y se usa tanto para los archivos como para los directorios.
Buscar y eliminar archivos de más de n días
Busque y elimine archivos de copia de seguridad con más de 20 días de antigüedad en el directorio actual.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Esto eliminará todos los archivos .bak que tengan más de 20 días.
Buscar y eliminar solo directorios
Para eliminar un directorio llamado dir22
find . -type d -name dir22 -exec rm -rf {} ;
Asegúrese de hacer coincidir el caso del nombre del directorio o use la opción -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Elimina tanto Dir22 como dir22
Para confirmar antes de la eliminación, use la opción -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Producción
rm: eliminar el directorio ‘./Dir22’? norte
rm: eliminar el directorio ‘./dir22’? y
En nuestro caso, escribimos n para el directorio Dir22 que no se eliminará e y para el directorio dir22 que ahora se eliminará.
Buscar y eliminar archivos vacíos
Puede usar cualquiera de los siguientes comandos para localizar archivos vacíos y eliminarlos automáticamente.
find ./ -type f -size 0 -exec rm -f {} ;
o
encontrar ./ -tipo f -tamaño 0 | xargs rm -f
o
buscar ./ -tipo f -tamaño 0 –eliminar
Buscar y eliminar directorios vacíos
Para eliminar directorios vacíos usaremos la opción d.
find ./ -type d -empty -exec rmdir {} ;
Otra alternativa es usar eliminar en lugar de eliminar.
find ./ -type d -empty -delete
Tenga en cuenta que eliminar archivos del sistema o críticos de su computadora puede dañar el sistema operativo o las aplicaciones o provocar la pérdida de sus datos importantes.
Para evitar eliminaciones accidentales, se recomienda utilizar una cuenta de usuario que no sea root. Además, asegúrese de eliminar los archivos correctos que no son útiles y de tener una copia de seguridad de todos sus archivos de datos por si acaso.
¿Que sigue?
Continúe y pruebe los comandos de búsqueda de Linux anteriores en su laboratorio o entorno NO DE PRODUCCIÓN. Vea si puede usar algunos para automatizar la limpieza del sistema de archivos con Crontab. Y, para dominar Linux, echa un vistazo a esto curso por Internet.