Comando Find
Hay multitud de archivos en nuestro ordenador. Buscar un archivo en particular puede ser un problema si somos desorganizados y/o no recordamos dónde está.
Afortunadamente, hay una linea de comando (disponible en cualquier sistema Linux) que nos va a salvar en estas situaciones: find.
Find es capaz de encontrar cualquier archivo dentro de nuestro sistema que coincida con los patrones que le indicamos. Bien utilizado es una herramienta potente que nos permite ahorrar tiempo y mantener a salvo nuestra paciencia.
En este post se muestran opciones básicas del comando find. En post futuros se verán usos más avanzados.
Buscando archivos por nombre
Supongamos que deseamos buscar todos los archivos avi dentro de las carpetas personales de los usuarios (/home). Escribimos en el terminal:
Fíjate en la posición del asterisco. Esto hace que busque archivos con cualquier texto (*) y que terminen en .avi
Si estamos buscando vídeos, limitarnos al formato avi no es una buena idea. Ahora vamos a hacer una búsqueda de todos los archivos .avi o .mpg:
Un aviso: como ya sabrás, los sistemas Linux son sensibles a las mayúsculas y minúsculas. Las búsquedas anteriores no muestran archivos en los que el texto AVI este escrito en mayúsculas. ¿Cómo hacer una búsqueda que englobe todos los archivos sin distinciones de mayúsculas/minúsculas? Sustituimos -name por -iname.
Añadiendo más criterios
Estas búsquedas nos pueden devolver decenas o cientos de resultados, por lo que tal vez nos interesa afinar más la búsqueda. El comando find nos brinda esta posibilidad.
Vamos a buscar los archivos avi con tamaño superior a 700MB:
Y ahora, aquellos archivos que se han modificado en los últimos 15 días:
Si no acostumbras a utilizar la terminal puede que te parezca un poco engorroso. Pero te aseguro que con un poco de practica acaba siendo un método ágil y rápido.
No related posts.
31 jul 2008 a las 19:39
Muchas gracias por estos peqeños recordatorios…
Una preguntita: ¿cómo se haría para buscar, por ejemplo, todos los archivos que NO fuesen AVI?
31 jul 2008 a las 21:32
Un post muy útil.
Gracias!
1 ago 2008 a las 1:25
Muy bueno, viene bien en caso de que estés en modo texto buscar algún archivo
12 ago 2008 a las 3:17
[...] Por último dejo un pequeño tutorial sobre el comando find, del que yo personalmente mucho desconocía. Link [...]
21 mar 2009 a las 7:53
Hola me gusto mucho el documento esta bien redactado, pero kisiera que me dieras una ayuda lo mas pronto posible de si en vez de poner -mtime 15, pongo -atime 15 que busca entonces este??? gracias espero tu respuesta …
1 jul 2009 a las 0:09
Tengo un problema con un archivo que no recuerdo el nombre pero si recuerdo lo que esta escrito adentro. Puedo buscar un archivo conociendo el contenido?
7 oct 2010 a las 11:35
¿Como se hace para que al ejecutar el comando find en Unix, no se muestren los directorios en los que no tienes permisos?
Es que me sale mucha basura en la busqueda, del tipo siguiente
find: cannot read dir ./biologic/.gnome: Permission denied
Lo que quiero es que lo anterior no se muestre
Gracias!
Salu2!
7 oct 2010 a las 11:48
CONTEXTACION AL 6
Ejecuta el comando
find . -name “*” -exec grep -li “textoDentroDelArchivo” {} \;
Con esto busca desde el directorio actual, todos los ficheros que contengan dentro textoDentroDelArchivo
7 mar 2011 a las 21:19
Respuesta para Mundi:
Con este comando buscas todos los archivos del directorio actual e inferiores que no tengan el nombre *.AVI, o sea que no cumplan con el patron *.AVI la solución es anteponer -not a la opción -name
find . -not -name “*.AVI”
Respuesta para Tito:
Este comando es ligeramente más complejo pero claro que se puede buscar un archivo por su contenido (texto) aunque la ejecución de este tome su tiempo, la lógica es la siguiente, como no sabemos como se llama el archivo por ende su ubicación, empezaremos a recorrer el sistema de archivos desde la raíz para listar todos los archivos, y conforme los valla ejecutando busque algún patrón de texto en su contenido, el comando seria.
ls -R / 2>/dev/null | xargs grep -l cadenadetextoabuscar 2>/dev/null
Lo que hace es listar recursivamente todos los archivos desde raiz y no mostrar el error estandar por ejemplo en caso de que no tengamos los permisos suficientes para listar el contenido de un directorio, luego todo este listado se lo mando como parametros al comando grep, grep -l me dice el nombre del archivo que concuerda con el patron de texto, que es justamente lo que buscamos, al final le digo a grep que no muestre el error estandar por ejemplo en caso de intentar buscar el patron de texto en un archivo que no sea de texto como un binario o una imagen o una canción etc.
Respuesta para jose:
Para que al ejecutar el comando find sin que nos muestre errores de busqueda, por que no tenemos suficientes permisos para accderer al directorio agregamos 2>/dev/null en Linux el error estandar es representado por el número 2, y lo redireccionamos aun hoyo negro, a la nada, o al vacio, como lo quieran llamar, lo redireccionamos con > y el nombre del dispositivo que funge como basurero es /dev/null entonces le digo 2>/dev/null o sea en caso de que exista algun error en la busqueda manda la salida de error(error estandar) a la nada(no lo muestres en la pantalla).
jose 8 si intentas buscar una cadena de texto usando la opción -exec esto es sumamente ineficiente, te explico el funcionamiento, primero find encuentra Archivo1 y se lo pasa a grep para buscar el patron, el problema es que en ese comento grep bloquea a find hasta que grep termina de buscar el patrón de texto en Archivo1 luego find encuentra Archivo2 y se lo pasa a grep y find tiene que volver a esperar a que grep termine por lo que el tiempo de ejecucion en relación con usar xargs es mucho mayor, por ejemplo si uso -exec tardare 2 horas, usando xargs tardare 15min, puedes verificarlo haciendo una prueba con el comando time:
time find / 2>/dev/null | xargs grep -l cadenatexto 2>/dev/null
time find . -exec grep -l cadenatexto {} \; 2>/dev/null
El primero es mucho más eficiente, seria como las mejores practicas, los dos funcionan pero uno funciona mejor.
18 dic 2011 a las 20:50
hola, quisiera saber como encontar todos los archivos mp3 que no tienen la extension, esop gracias
9 abr 2012 a las 19:25
Gracias, estoy haciendo un curso de Admin. en Linux y tengo algo de complicaciones con las opciones y parametros de los comenados, asi que la info me sirvio muchisimo
Saludos