Buscar

Linux: Buscar ficheros, directorios con find

Una de las formas para buscar ficheros y directorios en sistemas Linux, es utilizando el comando find.

Logo Linux find

La sintaxis genérica del comando, es la siguiente:

find ruta cadena-a-buscar

Veamos algunos ejemplos para entender su funcionamiento:

1) Búsqueda desde la raíz del sistema de todos los ficheros y directorios con el nombre "linux":

[root@LINUX1 ~]# find  / -name "linux"
/usr/lib64/perl5/linux
/usr/include/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/linux
/usr/libexec/scripts/linux
/usr/share/terminfo/l/linux
/lib/terminfo/l/linux


2) Búsqueda desde la raíz del sistema de todos los ficheros y directorios con el nombre "linux", con formato ls:

El formato ls nos muestra permisos, fecha de creación, tamaño, etc.

[root@LINUX1 ~]# find  / -name "linux" -ls
3236151    4 drwxr-xr-x   2 root     root         4096 Jan 28  2015 /usr/lib64/perl5/linux
3350605   12 drwxr-xr-x  20 root     root        12288 Jan 28  2015 /usr/include/linux
3490538    4 drwxr-xr-x   2 root     root         4096 Jan 28  2015 /usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/config/logo/linux
3499399   36 drwxr-xr-x  37 root     root        36864 Jan 28  2015 /usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/linux
3383816    4 drwxr-xr-x   2 root     root         4096 Jun  1  2012 /usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/config/logo/linux
3392381   36 drwxr-xr-x  35 root     root        36864 Jun  1  2012 /usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/linux
3449613    4 drwxr-xr-x   2 root     root         4096 Mar 12  2014 /usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/config/logo/linux
3458468   36 drwxr-xr-x  36 root     root        36864 Mar 12  2014 /usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/linux
3309674    4 drwxr-xr-x   2 root     root         4096 Jan 28  2015 /usr/libexec/scripts/linux
3212230    0 lrwxrwxrwx   1 root     root           32 Jun  1  2012 /usr/share/terminfo/l/linux -> ../../../../lib/terminfo/l/linux
712713    4 -rw-r--r--   1 root     root         1740 Aug 18  2010 /lib/terminfo/l/linux


Según el ejemplo, si prestamos atención al bloque referente a los permisos (azul), el primer carácter nos indica si se trata de:

d: Directorio
-: Fichero
l: Enlace simbólico

3) Búsqueda desde la raíz del sistema todos los directorios con el nombre "linux", no muestra ficheros:

[root@LINUX1 ~]# find  / -type d -name "linux"
/usr/lib64/perl5/linux
/usr/include/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/linux
/usr/libexec/scripts/linux

Indicamos que solo muestre directorios con el parámetro: -type d

Para indicar que solo muestre ficheros: -type f

4) Búsqueda desde la raíz del sistema de todos los ficheros y directorios con el nombre "linux" sin importar mayúsculas y minúsculas (parámetro -iname):

[root@LINUX1 ~]# find / -iname "linux"
/usr/lib64/perl5/linux
/usr/include/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-504.3.3.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/include/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/config/logo/linux
/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/include/linux
/usr/libexec/scripts/linux
/usr/share/terminfo/l/linux
/root/Linux
/lib/terminfo/l/linux

La entrada indicada en azul, contiene una mayúscula.

Parámetro -iname: case-insensitive

5) Buscar solo ficheros a partir del directorio /root que contengan la cadena "linux", sin importar mayúsculas y minúsculas:

[root@LINUX1 ~]# find  /root -type f -iname "*linux*"
/root/site/www.sysadmit.com/2013/11/comando-bc-calculadora-con-linux.html
/root/Linux.txt
/root/Linux

6) Búsqueda de ficheros a partir del directorio /root que contengan la cadena "linux", sin importar mayúsculas y minúsculas, con los permisos de 777:

[root@LINUX1 ~]# find  /root -type f -iname "*linux*" -perm 0777
/root/Linux.txt

Con el parámetro -perm, podemos indicar los permisos a buscar.

También podemos utilizar la siguiente nomenclatura:

Búsqueda de ficheros a partir del directorio /root que contengan la cadena "linux", sin importar mayúsculas y minúsculas, donde el usuario tenga permisos de ejecución:

[root@LINUX1 ~]# find  /root -type f -iname "*linux*" -perm /u=x
/root/Linux.txt

7) Búsqueda de ficheros vacíos a partir del directorio /usr/lib: 

[root@LINUX1 ~]# find /usr/lib -type f -empty
/usr/lib/python2.6/site-packages/sos/plugins/__init__.py
/usr/lib/python2.6/site-packages/iotop/__init__.py
/usr/lib/locale/locale-archive.tmpl
 

8) Búsqueda de ficheros modificados en las últimas tres horas, a partir del directorio /tmp:

[root@LINUX1 ~]# find /tmp -cmin -180
/tmp/atop.d/atop.acct
 

180, indica indica minutos: 60s x 3h = 180m

9) Buscar ficheros a partir del directorio actual con extensiones:  *.sh o bien *.bin o bien *.dir:

[root@LINUX1 ~]# find . -type f \( -name "*.sh" -o -name "*.bin" -o -name "*.dir" \)
./speedtest.sh
./vmware-tools-distrib/installer/services.sh
./vmware-tools-distrib/etc/xsession-xdm.sh
./vmware-tools-distrib/etc/installer.sh
./vmware-tools-distrib/etc/xsession-gdm.sh
./vmware-tools-distrib/lib/bin32/configure-gtk.sh
./vmware-tools-distrib/lib/lib64/wrapper-gtk24.sh
./vmware-tools-distrib/lib/bin64/configure-gtk.sh
./vmware-tools-distrib/lib/lib32/wrapper-gtk24.sh
./dominis-check/spf-check.sh
./dominis-check/dominis-check.sh
./VMT/vmware-tools-distrib/installer/services.sh
./VMT/vmware-tools-distrib/etc/xsession-xdm.sh
./VMT/vmware-tools-distrib/etc/installer.sh
./VMT/vmware-tools-distrib/etc/xsession-gdm.sh
./VMT/vmware-tools-distrib/lib/bin32/configure-gtk.sh
./VMT/vmware-tools-distrib/lib/bin64/configure-gtk.sh


10) Ejecutar un comando para cada resultado:

Desde el directorio actual, buscamos todos los ficheros de extensión mp3:

[root@LINUX1 ~]# find . -type f -name "*.mp3"
./1.mp3


Desde el directorio actual, buscamos todos los ficheros de extensión mp3 y eliminamos cada fichero encontrado:

[root@LINUX1 ~]# find . -type f -name "*.mp3" -exec rm -f {} \;

En este post, podemos ver mas ejemplos del comando find:

Linux: Ver últimos archivos modificados (SYSADMIT.com)

No hay comentarios:

Publicar un comentario