jueves, junio 01, 2006

Buscar archivos y directorios por consola, comando find

Mucha gente depende de aplicaciones gráficas para buscar archivos / directorios en Linux. Con find se puede buscar por consola y filtrar todo lo que nosotros queramos e incluso ejecutar comandos. Os voy a contar como usarla ya que mucha gente lo desconoce y es algo de conocimiento casi obligado :
find Busca archivos o directorio filtrando con estas opciones:

find: Busca archivos , directorio e incluso texto, usando estas opciones de find:

-type d/f/l –> Especifica que es un directorio (d) / fichero (f) / enlaces (l)
-name "Documents" –> Lo que buscamos (Distingue entre mayusculas y minusculas)
-iname "Resumen" –> Lo que buscamos (NO distingue entre mayusculas y minusculas)
-print –> Que lo muestre por pantalla (No suele ser necesario)
-size +10k –> Que sea superior a 10 Kb
-atime +5 –> Que se haya accedido hace 5 dias
-exec –> Ejecuta una comando –> … -exec cp {} /tmp \; –> {} –> Archivos de la busqueda
-ok –> Ejecuta un comando (Pide confirmacion) –> -ok cp {} /tmp \;
-user usuario –> Filtra por dueño de directorio/archivo
-group grupo –> Filtra por grupo

Ejemplos:

Busca en /home/busi/ todos los archivos mp3 usados desde hace 5 dias de un tamaño superior a 30 kb, los copia y los deja en /home/busi/copia

find /home/busi/ -type f -atime +5 -size +30k -name "*.mp3" -exec cp {} /home/busi/copia \;

Lo mismo que el anterior pero preguntando antes de ejecutarlo

find /home/busi/ -type f -atime +5 -size +200k -name "*" -ok cp {} /home/busi/copia \;

<>

Buscar por grupos:

find /home/ -type l -group busigrupo -name "*" -print

Con ejecutar un comando,.. me refiero a cualquier comando, script,..

echo "Archivo encontrado" > tempi
find /home/busi/ -type f -size -40000k -name "*CACA.avi" -exec mutt -s {} busilezas@gmail.com <>

Recibido Mail –> N 6 root@busindre.com- Fri May 19 02:31 37/1956 /home/busi/SGAE_CACA.avi
Contenido del mail –> encontrado -exec mutt -s /home/busi/tema_sensible.mp3

Buscar texto:

find SGAE -type f -exec grep "http" {} /dev/null \;
Resultado: SGAE:http://youtube.com/watch?v=5t2kuQuh5Ts

Como vemos se pueden hacer muchas cosas, juntarlo con scripts,… Solo hemos de pensarlas un poco y conseguiremos grandes resultados, espero que os haya gustado. Un saludo!

http://www.tuxhuellas.com/

10 comentarios:

Anónimo dijo...

gracias por la ayuda

carpincho

Moan dijo...

muy bueno el post, pero tenes idea como hacer para hacer una busqueda mas amplia, osea quiero buscar todas las carpetas que contengan la palabra "dream" por ej... porque de la forma que se solo puedo buscar si tengo el nombre exacto del archivo o directrorio...

http://moan-linux.blogspot.com/
http://moan-linux.blogspot.com/
http://moan-linux.blogspot.com/
http://moan-linux.blogspot.com/

Pablo Contramaestre dijo...

La forma de buscar la carpeta dream es la siguiente: ejm..
find /home/usuario/ -type d -name "dream*"


donde -type d: que busque directorios

donde -name "dream*" que busque los directorios que comiencen con dream, tambien podrias usar "*dream*", asi podrias mostrar todos los dir q contengan la palabra dream en cualquier parte del nombre

Guillermo Linares dijo...

Muchísimas gracias Pablo, llevo tiempo forcejeando con "find" y me lo has explicado en un momento.
Si se pudiera votar por el nuevo estándar del "man" para la web-2 eligiria uno tipo enlaces a explicaciones como la tuya, enhorabuena.
Lo dicho muchas gracias
Guillermo
Desde Córdoba, Andalucía

Anónimo dijo...

que bueno el blog...pero sabes como hacer para encontrar un archivo en el sistema por ejemplo: 'xxx' tanto si una o todas las letras del archivo son mayúsculas como minisculas?

Pablo Contramaestre dijo...

La manera de buscar archivos sin distinguir mayusculas o minusculas es con la opcion -iname, ejemplo
find /home/usuario/ -iname "todos*"

AnDrFrN!! dijo...

bueno y como hago para buscar un texto que este dentro de un archivo y luego qu eese texto se cambie con otro que necesito.?

Anónimo dijo...

Por gente como vos... es que todos aprendemos un poquito mas... MUCHAS GRACIAS!!!

Anónimo dijo...

Por favor nos dices

¿cómo buscar archivos que NO sean del usuario X?

Estas dos líneas no funcionan:

find /home/que01/www/* -user !='user'
find /home/que01/www/* -user !'user'

Gracias

Anónimo dijo...

podemos buscar ficheros que pertenecen a cierto usuario… o que no pertenecen a nadie y han quedado “huérfanos”, con la orden:

find -nouser

Si queremos buscar ficheros de alguien concreto usaremos las opciones -user o -uid. En este último caso deberemos saber el identificador de un usuario, algo que no es lo normal que sepamos, pero siempre viene bien tenerlo en cuenta. Además podemos buscar ficheros que pertenecen a un usuario A o a un usuario B con el parámetro -o, con lo que escribiríamos:

find -user root -o -user www-data

Y como era de esperar, también podemos buscar los ficheros que NO pertenecen a un usuario concreto:

find -not -user www-data