¿Cómo usar el comando find en Linux? [A Beginner’s Guide]

En su forma básica, encontrar es fácil. Al mismo tiempo, puede ser complejo con la cantidad de opciones, pruebas y acciones disponibles.

El comando de búsqueda es una herramienta increíblemente poderosa, y esforzarse en aprenderlo puede ser gratificante. Lo ayudará a realizar varias tareas de administración del sistema de manera eficiente, como la administración del espacio en disco, las operaciones recursivas de archivos y las copias de seguridad.

El comando de búsqueda de Linux busca archivos y carpetas según los criterios que defina y le permite realizar una acción en los resultados de la búsqueda. La sintaxis de find es así:

$ find directory-to-search criteria action

donde

directorio a buscar es el punto de partida desde donde find comienza a buscar archivos. La búsqueda incluye todos los subdirectorios bajo este directorio. criterio (prueba) indica qué archivos buscar acción indica qué hacer con cada archivo encontrado que coincida con los criterios.

Pruebas

Buscar por nombre

Aquí hay un ejemplo simple. El siguiente comando busca el archivo a.txt en el directorio actual:

$ find . -name "a.txt"
./a.txt

Donde

. se refiere al directorio actual -nombre de prueba especifica los criterios que deben coincidir

Esta búsqueda con la prueba de nombre distingue entre mayúsculas y minúsculas e ignoraría el archivo A.txt. Para asegurarse de que su búsqueda no distinga entre mayúsculas y minúsculas, utilice la prueba de nombre:

$ find . -iname "a.txt"
./a.txt
./A.txt

Para buscar todos los archivos de imagen .jpg en el directorio actual, utilice el patrón comodín *.jpg:

$ find . -name "*.jpg"
./genxfacebook2.jpg
./genxfacebook1.jpg
./Moodle2.jpg
./moodle.jpg
./moodle/moodle1.jpg
./genxfacebook.jpg

Puede utilizar el nombre del directorio en el que buscar. Por ejemplo, para buscar todas las imágenes .jpg en el directorio /home:

$ find /home -name "*.jpg"
find: `/home/ubuntu/.ssh': Permission denied
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find: `/home/me/testfiles': Permission denied
find: `/home/me/data': Permission denied
/home/me/water.jpg
find: `/home/me/.cache': Permission denied

Si ve demasiados errores de permisos denegados, puede agregar 2>/dev/null al final del comando. Esto redirige los mensajes de error al dispositivo /dev/null y ofrece un resultado más limpio:

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
/home/me/water.jpg

Buscar por tipo de archivo

Con la prueba de tipo, puede buscar archivos por tipo. Los tipos de archivo pueden ser:

f plain files
d directories
l symbolic links
b block devices
c character devices
p named pipes
s sockets

Por ejemplo, al usar test -type d solo se listarán directorios:

$ find . -type d
.
./.ssh
./.cache
./moodle

Buscar por tamaño de archivo

Es posible que deba buscar archivos grandes y eliminarlos. En el siguiente ejemplo, el tamaño de prueba va seguido de la cadena +1G. Esto buscaría todos los archivos de más de 1 GB.

$ find . -size +1G 
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

El signo + significa buscar archivos más grandes que el siguiente número. Se puede usar un símbolo menos (-) para indicar menor que. No usar ningún signo significaría coincidir exactamente con el tamaño.

El número va seguido de la unidad de tamaño del archivo. Las unidades pueden ser:

Personaje unidad de tamaño fino
B 521 bloques de despedida
C bytes
k kilobytes
METRO Megabytes
GRAMO Gigabytes

Buscar directorios y archivos vacíos

Use -empty test para encontrar directorios y archivos vacíos como este:

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

Buscar por hora de modificación del archivo

Puede buscar todos los archivos y directorios según el tiempo de creación o modificación con -cmin test. Para buscar todos los archivos modificados en los últimos 60 minutos (menos de 60) use -60 así:

$ find . -cmin -60
.
./a.txt
./datafiles

Para archivos modificados en cualquier momento antes de los últimos 60 minutos, use +60.

Buscar por hora de acceso

Puede buscar archivos por hora de último acceso, con -atime test. Por ejemplo, el siguiente comando busca archivos a los que no se accedió en los últimos 180 días:

$ find . -atime +180

Estos se pueden mover a un dispositivo de copia de seguridad si el espacio en disco se está agotando.

Buscar por nombre de usuario

Con la prueba de usuario de usuario, puede buscar todos los archivos y directorios que pertenecen a un usuario. Por ejemplo, el siguiente comando busca todos los archivos y directorios propiedad del usuario ubuntu en el directorio /home:

$ find /home -user ubuntu 2>/dev/null
/home/ubuntu
/home/ubuntu/.bash_logout
/home/ubuntu/.bashrc
/home/ubuntu/.ssh
/home/ubuntu/.profile

Buscar por modo

¿Desea buscar archivos configurados en un modo específico, es decir, tener un conjunto específico de permisos? Utilice la prueba permanente. El siguiente ejemplo busca archivos con permisos establecidos en 777:

$ find /home -perm 777

Operadores

Puede usar los siguientes tres operadores lógicos para combinar varias pruebas en un solo comando de búsqueda:

Por ejemplo, el siguiente comando busca archivos de más de 100 MB propiedad del usuario yo:

$ find /home  -user me  -and  -size +100M  2>/dev/null
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

El siguiente comando busca archivos de más de 100 MB propiedad del usuario yo o del usuario vagrant:

$ find /home \( -user vagrant -or -user me \)  -and  -size +100M  2>/dev/null
/home/vagrant/LibreOffice_7.0.1_Linux_x86-64_deb.tar.gz
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

Debe colocar un carácter de barra invertida delante de los paréntesis para evitar que el shell intente interpretarlos.

Comportamiento

find le brinda los resultados de la búsqueda y luego la opción de realizar una acción en ellos. Aquí hay algunas acciones predefinidas:

Acción Descripción
-Eliminar Elimina los archivos que coinciden con los criterios de búsqueda.
-ls Muestra una salida ls detallada con tamaños de archivo y recuento de inodos
-imprimir Muestra la ruta completa de los archivos coincidentes. Es la acción predeterminada si no se especifica ninguna otra acción.
-ejecutivo Ejecuta el comando que sigue, en cada línea de la salida de búsqueda

Entonces, si desea buscar todos los archivos vacíos y eliminarlos, así es como puede hacerlo:

$ find . -empty -delete

Precaución: antes de usar la acción de eliminar, siempre es seguro ejecutar el comando una vez con la acción -print y confirmar los resultados.

La acción -exec es especial. Le permite ejecutar un comando de su elección en los resultados de búsqueda. Es como esto:

-exec <em>command</em> {} \;

Aquí

command es el comando que desea ejecutar en los resultados de búsqueda, como rm, mv o cp. {} representa los resultados de búsqueda. El comando termina con un punto y coma escapado con una barra invertida.

Entonces, el comando para buscar y eliminar todos los archivos vacíos se puede escribir así:

$ find . -empty -exec rm {} \;

Aquí hay otro ejemplo usando la acción -exec. El siguiente comando copia todos los archivos de imagen .png en el directorio de copia de seguridad/imágenes:

$ find . -name "*.png" -exec cp {} /backups/images \;

Conclusión

Puede usar el comando de búsqueda de Linux para buscar archivos según el nombre, la fecha del último acceso, la fecha de la última modificación, el nombre del usuario (propietario), el nombre del grupo, el tamaño, los permisos y varios otros criterios. Con estos resultados de búsqueda, puede realizar acciones sobre ellos, como eliminarlos, copiarlos o moverlos a una ubicación diferente.

Una vez que domine el comando de búsqueda, puede ser de gran ayuda y puede simplificarle las tareas de administración del sistema. ¡Y la clave para dominarlo es practicarlo y usarlo!

Publicaciones relacionadas

Botón volver arriba