Introducción al comando Find
El comando por excelencia para buscar archivos en Linux es find. En este articulo se pretende dar
una introducción a este comando.
Para los ejemplos trabajare sobre una carpeta llamada "test" con la siguiente estructura:
El ejemplo mas básico es buscar por nombre de fichero, en mi caso buscare un fichero llamado "punteros.c":
El parametro -name tiene en cuenta si la palabra tiene letras en minúscula o mayúscula, si se quiere
ignorar eso, hay que usar el parametro -iname:
Para limitar la búsqueda a un directorio, se hace de la siguiente manera:
En mi caso, he limitado la búsqueda a la carpeta /home/mad/test.
Podemos indicarle hasta el nivel de profundidad al realizar la busqueda:
En el primero ejemplo estamos partiendo desde /(root) y le indicamos que busque el fichero "backup.sh" en los
tres primeros niveles, como veréis el comando no arroja ningún resultado.
A continuación lanzamos el mismo comando pero indicándole que busque en los cuatro primeros niveles y vemos que
encuentra el fichero deseado.
Se le puede indicar un rango de niveles de profundidad:
En este ejemplo se buscara entre los niveles tres y cinco.
Mediante el parámetro -exec podemos ejecutar otros comandos a medida que se encuentran ficheros:
En este caso, se buscan un fichero llamado "SoCkeTs.c" y se le calcula el hash MD5.
Para invertir la búsqueda, se hace la siguiente manera:
El comando anterior encuentra todos los ficheros cuyo nombre no es "sockets" y limitando la búsqueda
al directorio actual (mediante el punto .).
Una función muy útil en cuanto a auditorias de seguridad es la búsqueda de ficheros por permisos:
El ejemplo de arriba busca todos los ficheros situados en el directorio actual y que tengan permisos de ejecución
para "el grupo".
Otra función bastante útil puede ser la búsqueda de ficheros vacíos:
Eso buscara todos los ficheros vacíos de la carpeta personal del usuario.
Podemos buscar los ficheros mas grandes del sistema:
Eso buscara los tres ficheros mas grandes de la carpeta "this" o en la que estamos.
Usando la búsqueda por tipo podemos por ejemplo, buscar todos los ficheros ocultos:
Recuerdo que en Unix/Linux los ficheros ocultos tienen un punto delante del nombre, en este caso se buscan
todos los que empiezan por un punto, o sea, todos los ocultos.
Otra función bastante útil es la búsqueda de ficheros por tamaño:
Encontrara todos los ficheros mayores de diez megas en la carpeta personal del usuario.
Para las operaciones que mas usamos, podemos crear un alias:
Ese alias, al ejecutarlo, borrara todos los ficheros con el nombre "a.out" encontrados en el
directorio actual.
Este artículo está basado en 15 Practical Linux Find Command Examples.
En el blog del autor, podéis encontrar la segunda parte del artículo: 15 Awesome Linux Find Command Examples (Part2).
El comando por excelencia para buscar archivos en Linux es find. En este articulo se pretende dar
una introducción a este comando.
Para los ejemplos trabajare sobre una carpeta llamada "test" con la siguiente estructura:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ ls
backup.sh paso_referencia.c punteros.c Stuff
find_intro.sh Pilas_Colas.cpp punteros.cppEl ejemplo mas básico es buscar por nombre de fichero, en mi caso buscare un fichero llamado "punteros.c":
Código (bash) [Seleccionar]
find -name "punteros.c"
./punteros.cEl parametro -name tiene en cuenta si la palabra tiene letras en minúscula o mayúscula, si se quiere
ignorar eso, hay que usar el parametro -iname:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find -iname "pilas_colas.cpp"
./Pilas_Colas.cppPara limitar la búsqueda a un directorio, se hace de la siguiente manera:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ pwd
/home/mad/test
mad@mad-laptop:~/test$ find /home/mad/test -name punteros.c
/home/mad/test/punteros.cEn mi caso, he limitado la búsqueda a la carpeta /home/mad/test.
Podemos indicarle hasta el nivel de profundidad al realizar la busqueda:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find / -maxdepth 3 -name backup.sh
mad@mad-laptop:~/test$ sudo find / -maxdepth 4 -name backup.sh
/home/mad/test/backup.shEn el primero ejemplo estamos partiendo desde /(root) y le indicamos que busque el fichero "backup.sh" en los
tres primeros niveles, como veréis el comando no arroja ningún resultado.
A continuación lanzamos el mismo comando pero indicándole que busque en los cuatro primeros niveles y vemos que
encuentra el fichero deseado.
Se le puede indicar un rango de niveles de profundidad:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find / -maxdepth 3 -maxdepth 5 -name backup.sh
/home/mad/test/backup.shEn este ejemplo se buscara entre los niveles tres y cinco.
Mediante el parámetro -exec podemos ejecutar otros comandos a medida que se encuentran ficheros:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ./Stuff -iname "SoCkeTs.c" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e ./Stuff/sockets.cEn este caso, se buscan un fichero llamado "SoCkeTs.c" y se le calcula el hash MD5.
Para invertir la búsqueda, se hace la siguiente manera:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find . -not -iname "sockets.c"
.
./punteros.c
./Stuff
./Stuff/pr0n.avi
./Stuff/biografia.txt
./Stuff/links.txt
./backup.sh
./punteros.cpp
./find_intro.sh
./paso_referencia.c
./Pilas_Colas.cppEl comando anterior encuentra todos los ficheros cuyo nombre no es "sockets" y limitando la búsqueda
al directorio actual (mediante el punto .).
Una función muy útil en cuanto a auditorias de seguridad es la búsqueda de ficheros por permisos:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find . -perm -g=x -type f -exec ls -l {} \;
-rwxrwxrwx 1 mad mad 198 2011-07-28 20:49 ./find_intro.sh
-r-xr-xr-x 1 mad mad 0 2011-07-28 20:49 ./paso_referencia.cEl ejemplo de arriba busca todos los ficheros situados en el directorio actual y que tengan permisos de ejecución
para "el grupo".
Otra función bastante útil puede ser la búsqueda de ficheros vacíos:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ~ -empty
/home/mad/.evolution/mail/local/Outbox
/home/mad/.evolution/mail/local/Drafts
/home/mad/.evolution/mail/local/Sent
/home/mad/.evolution/mail/local/Templates.ibex.index.data
/home/mad/.evolution/mail/local/Templates
/home/mad/.evolution/mail/local/Sent.ibex.index.data
/home/mad/.evolution/mail/local/Outbox.ibex.index.data
/home/mad/.evolution/mail/local/Drafts.ibex.index.data
/home/mad/.evolution/calendar/config
/home/mad/.evolution/memos/configEso buscara todos los ficheros vacíos de la carpeta personal del usuario.
Podemos buscar los ficheros mas grandes del sistema:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find . -type f -exec ls -s {} \; | sort -n -r | head -3
4 ./find_intro.sh
0 ./Stuff/sockets.c
0 ./Stuff/pr0n.aviEso buscara los tres ficheros mas grandes de la carpeta "this" o en la que estamos.
Usando la búsqueda por tipo podemos por ejemplo, buscar todos los ficheros ocultos:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ~ -type f -name ".*"
/home/mad/.hgrc
/home/mad/.recently-used
/home/mad/.xvidcaprc
/home/mad/.scapy_historyRecuerdo que en Unix/Linux los ficheros ocultos tienen un punto delante del nombre, en este caso se buscan
todos los que empiezan por un punto, o sea, todos los ocultos.
Otra función bastante útil es la búsqueda de ficheros por tamaño:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find ~ -size +10MEncontrara todos los ficheros mayores de diez megas en la carpeta personal del usuario.
Para las operaciones que mas usamos, podemos crear un alias:
Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ alias rmao="find . -iname a.out -exec rm {} \;"Ese alias, al ejecutarlo, borrara todos los ficheros con el nombre "a.out" encontrados en el
directorio actual.
Este artículo está basado en 15 Practical Linux Find Command Examples.
En el blog del autor, podéis encontrar la segunda parte del artículo: 15 Awesome Linux Find Command Examples (Part2).