1. Qué herramienta para qué búsqueda
«Buscar» abarca tareas distintas, y ya tenemos herramientas para algunas. Conviene ubicar las nuevas en relación con las que conocemos:
| Busco… | Herramienta | Visto en |
|---|---|---|
| Dónde está un comando | type, which, whereis | Tema 3 |
| Archivos por su nombre, en un directorio que conozco | Comodines: ls *.txt | Tema 9 |
| Archivos por nombre, tipo, tamaño o fecha, en todo un árbol | find | Este tema |
| Un archivo por su nombre, en todo el sistema y al instante | locate | Este tema |
| Archivos por lo que tienen escrito dentro | grep -r | Tema 27 |
La diferencia entre los comodines y find es de alcance. Un comodín mira un nivel: *.txt son los archivos de texto de este directorio. find baja por todos los subdirectorios, hasta el fondo, y además puede preguntar por propiedades que un nombre no revela, como el tamaño o la fecha.
2. find: dónde, qué y qué hacer
En el tema 3 pusimos a find entre los comandos que no siguen la gramática habitual. Su línea tiene tres partes, siempre en este orden:
find /var/log -name "*.log" -mtime -7 -print
│ │ │ │
│ │ │ └─ acción: qué hacer con cada resultado
│ │ └─ condición: modificado en los últimos 7 días
│ └─ condición: el nombre termina en .log
└─ dónde empezar a buscar
| Parte | Qué indica | Si se omite |
|---|---|---|
| Dónde | El directorio de partida. find lo recorre con todo lo que contiene. Pueden ser varios. | El directorio de trabajo. |
| Condiciones | Qué debe cumplir un archivo para ser seleccionado. | Se selecciona todo. |
| Acción | Qué hacer con cada archivo seleccionado. | -print: mostrar su ruta. |
Las condiciones y las acciones son palabras completas precedidas de un solo guion: -name, no --name. Es la rareza de find, y hay que aceptarla.
Sin condiciones, find muestra todo lo que hay a partir del punto de partida. Es un listado recursivo con una ruta por línea:
$ cd ~/practica
$ find # equivale a: find . -print
.
./notas.txt
./fotos
./informe.txt
$ find ~/practica
/home/ana/practica
/home/ana/practica/notas.txt
/home/ana/practica/fotos
/home/ana/practica/informe.txt
Tres detalles de esa salida valen para todo el tema. El punto de partida forma parte de los resultados: por eso aparece el propio directorio. Las rutas se muestran con la misma forma que el punto de partida: relativas si escribiste ., absolutas si escribiste una ruta absoluta. Y el orden no es alfabético, sino el orden interno del directorio.
3. Buscar por nombre
La condición más usada es -name, que compara el nombre de cada archivo con un patrón de comodines, los mismos del tema 9:
$ find . -name "*.txt"
./notas.txt
./informe.txt
$ find . -name "notas.txt"
./notas.txt
$ find . -name "notas" # nada: ningún archivo se llama exactamente así
$ find . -iname "NOTAS*" # sin distinguir mayúsculas
./notas.txt
Hay dos reglas, y las dos son fuente de errores:
Lo adelantamos en el tema anterior. Sin comillas, la shell expande el asterisco antes de que find lo vea, con los archivos que haya en el directorio de trabajo. El comando falla con un mensaje confuso, o busca otra cosa.
La segunda: -name compara el nombre completo, no una parte. -name "notas" no encuentra notas.txt. Para buscar «lo que contiene» hay que decirlo con asteriscos: -name "*notas*".
| Condición | Compara | Ejemplo |
|---|---|---|
-name patrón | El nombre del archivo, sin los directorios. | -name "*.conf" |
-iname patrón | Lo mismo, sin distinguir mayúsculas de minúsculas. | -iname "*.jpg" encuentra también .JPG |
-path patrón | La ruta completa. Aquí el asterisco sí atraviesa las barras. | -path "*/apt/*" |
Con un punto de partida más grande se ve para qué sirve. Buscar todo lo que se llama README en la documentación instalada, sin importar en qué subdirectorio esté:
$ find /usr/share/doc -name "README*"
/usr/share/doc/sudo/README.Debian
/usr/share/doc/bash/README.gz
/usr/share/doc/tar/README.Debian
…
4. Buscar por tipo
-type selecciona según la clase de objeto, con las mismas letras que muestra el primer carácter de ls -l (tema 7), salvo una:
| Condición | Selecciona |
|---|---|
-type f | Archivos comunes. La letra es de file; en ls -l se ven con un guion. |
-type d | Directorios. |
-type l | Enlaces simbólicos. |
$ find . -type d
.
./fotos
$ find . -type f
./notas.txt
./informe.txt
Casi siempre conviene incluirla. Cuando se busca «archivos de más de cien megabytes» o «lo modificado hoy», lo que interesa son archivos, y sin -type f aparecen también los directorios que cumplen la condición.
5. Buscar por tamaño
-size compara el tamaño con un número seguido de una unidad. El signo delante del número cambia el sentido de la comparación, y esa convención se repite en otras condiciones de find:
| Se escribe | Significa |
|---|---|
+N | Más de N. |
-N | Menos de N. |
N | Exactamente N. |
| Unidad | Significa | Ejemplo |
|---|---|---|
c | Bytes | -size -100c: menos de 100 bytes |
k | Kilobytes | -size +10k: más de 10 KB |
M | Megabytes | -size +100M: más de 100 MB |
G | Gigabytes | -size +1G: más de 1 GB |
$ find . -type f -size +10k
./informe.txt
$ find . -type f -size -100c
./notas.txt
$ find . -empty # archivos de tamaño cero y directorios sin contenido
./fotos
Las letras distinguen mayúsculas: k minúscula, M y G mayúsculas. Y hay una trampa con el redondeo. find redondea cada tamaño hacia arriba a la unidad indicada antes de comparar, de modo que un archivo de un solo byte cuenta como «1M» cuando la unidad es el megabyte. Por eso -size -1M no encuentra «lo que pesa menos de un megabyte», sino únicamente los archivos vacíos. Para los tamaños chicos conviene usar una unidad menor: -size -1024k.
El uso clásico de esta condición es averiguar qué ocupa el disco:
$ find ~ -type f -size +100M # los archivos grandes de mi directorio personal
6. Buscar por fecha
Las condiciones de fecha miden cuánto tiempo pasó desde la última modificación, con la misma convención de signos:
| Condición | Selecciona lo modificado… |
|---|---|
-mtime -7 | Hace menos de 7 días: en la última semana. |
-mtime +30 | Hace más de 30 días. |
-mmin -60 | Hace menos de 60 minutos. |
-newer archivo | Después que ese otro archivo. |
El signo es lo que más confunde, porque se lee al revés de lo que sugiere la intuición: el menos es lo reciente, porque pasó menos tiempo; el más es lo viejo.
$ find . -type f -mtime -1 # modificado en las últimas 24 horas
./notas.txt
./informe.txt
$ find . -newer notas.txt # modificado después que notas.txt
.
./fotos
./informe.txt
Los días de -mtime son períodos de 24 horas contados desde este momento, no días del calendario. -newer evita las cuentas: compara con la fecha de otro archivo, y sirve para responder «¿qué cambió desde que hice tal cosa?».
Las mismas condiciones existen para las otras fechas del tema 7, cambiando la primera letra: -atime y -amin para el último acceso, -ctime y -cmin para el último cambio de estado. Dos usos reales:
$ find /etc -type f -mtime -2 # qué configuración cambió en los últimos dos días
$ find /var/log -name "*.gz" -mtime +90 # registros comprimidos de más de tres meses
7. Buscar por dueño y permisos
Las demás columnas del listado largo también se pueden consultar. Las mencionamos aquí para tener el cuadro completo; cobran sentido en el bloque 4:
| Condición | Selecciona |
|---|---|
-user ana | Lo que pertenece a ese usuario. |
-group ventas | Lo que pertenece a ese grupo. |
-nouser | Lo que no pertenece a ningún usuario existente. |
-perm 644 | Lo que tiene exactamente esos permisos. |
-executable, -readable, -writable | Lo que tú puedes ejecutar, leer o modificar. |
$ find /tmp -user ana # lo que dejé en el directorio temporal
/tmp/prueba
/tmp/prueba/notas.txt
…
8. Combinar condiciones
La potencia de find está en combinar. Cuando se escriben varias condiciones seguidas, un archivo debe cumplirlas todas: entre ellas hay un «y» implícito. Varias ya aparecieron así. Para las otras combinaciones hay operadores:
| Operador | Significa | Ejemplo |
|---|---|---|
Nada, o -a | Y: las dos condiciones. | -name "*.txt" -size +10k |
-o | O: al menos una. | -name "*.jpg" -o -name "*.png" |
!, o -not | No: lo que no cumple la condición. | ! -name "*.txt" |
\( … \) | Agrupa. | \( -name "*.jpg" -o -name "*.png" \) |
$ find . -name "*.txt" -size +10k # .txt Y de más de 10 KB
./informe.txt
$ find . ! -name "*.txt" # lo que NO es .txt
.
./fotos
$ find . -name "notas*" -o -name "fotos" # un nombre O el otro
./notas.txt
./fotos
Los paréntesis hacen falta cuando se mezclan «y» con «o», porque el «y» se resuelve primero, igual que la multiplicación antes que la suma. Deben escribirse con una barra invertida delante y con espacios alrededor: el paréntesis es un carácter especial para la shell, como vimos en el tema anterior, y hay que protegerlo para que llegue a find.
$ find ~ \( -iname "*.jpg" -o -iname "*.png" \) -size +1M
Sin los paréntesis, la condición de tamaño se aplicaría solo a los .png, y aparecerían todos los .jpg, de cualquier tamaño.
9. Limitar la profundidad
Por defecto, find baja hasta el último subdirectorio. Dos opciones acotan el recorrido:
| Opción | Efecto |
|---|---|
-maxdepth 1 | Solo el punto de partida y su contenido directo. No entra en los subdirectorios. |
-maxdepth 2 | Hasta un nivel de subdirectorios. |
-mindepth 1 | Excluye el propio punto de partida de los resultados. |
$ find /etc -maxdepth 1 -name "host*"
/etc/hostname
/etc/hosts
/etc/host.conf
$ find ~ -maxdepth 1 -type d ! -name ".*" # mis directorios visibles, sin entrar en ellos
Con -maxdepth 1, find se convierte en un ls con filtros: mira un solo directorio, pero puede seleccionar por tamaño, fecha o tipo, cosa que los comodines no saben hacer. Estas dos opciones deben escribirse antes que las condiciones; si no, find emite una advertencia.
Para dejar fuera una rama del árbol, lo más simple es negar una condición de ruta: find . ! -path "./fotos/*" recorre todo salvo el contenido de fotos.
10. Los errores de permisos
Al buscar fuera del directorio personal, find tropieza con directorios en los que un usuario común no puede entrar, y lo informa:
$ find /etc -name "hostname"
find: ‘/etc/polkit-1/rules.d’: Permission denied
/etc/hostname
find: ‘/etc/ssl/private’: Permission denied
No es una falla. find encontró lo que pudo y avisa de los lugares que no pudo revisar. En una búsqueda sobre /, sin embargo, los avisos son cientos y tapan los resultados. Se los puede descartar así:
$ find /etc -name "hostname" 2>/dev/null
/etc/hostname
Es un anticipo del bloque 5. Los programas escriben sus resultados y sus mensajes de error por dos canales separados; en la pantalla se mezclan, pero se los puede dirigir a lugares distintos. 2> significa «el canal de errores, a…», y el destino es /dev/null, el sumidero del tema 8. Los resultados siguen llegando a la pantalla.
| Opción | Cuándo conviene |
|---|---|
| Dejar los avisos | Cuando son pocos, o cuando importa saber qué no se revisó. |
2>/dev/null | Cuando el archivo buscado seguramente es legible y los avisos solo estorban. |
sudo find … | Cuando hace falta revisar todo, incluidos los directorios restringidos. |
Un consejo de eficiencia: cuanto más preciso el punto de partida, mejor. Buscar un archivo de configuración en /etc lleva una fracción de segundo; buscarlo en / obliga a recorrer el disco entero, incluidos /proc y /sys, que no contienen archivos reales. El mapa del tema 8 sirve para eso.
11. Las acciones: mostrar y borrar
Hasta aquí usamos la acción por defecto, -print. Hay otras:
| Acción | Hace con cada resultado |
|---|---|
-print | Muestra su ruta. Es la acción si no se indica ninguna. |
-ls | Lo muestra en formato largo, como ls -l. |
-delete | Lo borra. |
-exec comando | Ejecuta un comando sobre él. Sección siguiente. |
$ find . -type f -ls
1311452 4 -rw-rw-r-- 1 ana ana 18 oct 12 10:32 ./notas.txt
1311460 16 -rw-rw-r-- 1 ana ana 12813 oct 12 10:41 ./informe.txt
Las dos primeras columnas son el número de inodo y el espacio ocupado en disco, en kilobytes; el resto es el listado largo conocido.
-delete es la acción que exige respeto. Borra sin preguntar y sin papelera, todo lo que las condiciones seleccionen. Tiene además una particularidad que ha causado desastres: find evalúa su línea de izquierda a derecha, y la acción se aplica en el lugar donde está escrita.
find . -name "*.tmp" -delete borra los archivos .tmp. find . -delete -name "*.tmp" borra todo el árbol: la acción aparece antes que la condición, y se ejecuta sobre cada archivo antes de mirar su nombre. El procedimiento seguro es el del tema anterior: ejecutar primero la búsqueda sin acción, leer la lista, y recién entonces recuperar la línea y añadir -delete al final.
12. -exec: un comando sobre cada resultado
La acción más versátil es -exec, que ejecuta cualquier comando sobre lo encontrado. Así find deja de ser un buscador para convertirse en una forma de aplicar una operación a una selección de archivos.
find . -name "*.txt" -exec ls -lh {} \;
│ │ │ │
│ │ │ └─ fin del comando
│ │ └─ aquí se pone la ruta de cada resultado
│ └─ el comando, con sus opciones
└─ la acción
Las llaves {} marcan el lugar donde find escribe la ruta encontrada. El comando debe tener un final explícito, y hay dos terminadores, con efectos distintos:
| Terminador | El comando se ejecuta… | Equivale a |
|---|---|---|
\; | Una vez por cada resultado. | ls -lh a, luego ls -lh b, luego ls -lh c |
+ | Una sola vez, con todos los resultados como argumentos. | ls -lh a b c |
Con echo, la lente del tema anterior, la diferencia se ve:
$ find . -name "*.txt" -exec echo Encontré: {} \;
Encontré: ./notas.txt
Encontré: ./informe.txt
$ find . -name "*.txt" -exec echo Encontré: {} +
Encontré: ./notas.txt ./informe.txt
$ find . -name "*.txt" -exec ls -lh {} +
-rw-rw-r-- 1 ana ana 13K oct 12 10:41 ./informe.txt
-rw-rw-r-- 1 ana ana 18 oct 12 10:32 ./notas.txt
La forma con + es más rápida, porque arranca un solo proceso en lugar de miles, y es la preferible siempre que el comando acepte varios archivos. La forma con \; queda para los comandos que trabajan con uno por vez. El punto y coma lleva una barra invertida por la razón de siempre: para la shell es un carácter especial, y hay que protegerlo para que llegue a find.
-exec resuelve dos problemas que dejamos pendientes en el tema 9. Uno es el error Argument list too long: con +, find reparte los archivos en varias ejecuciones si no entran en una. El otro son los nombres con espacios: cada ruta se entrega al comando como un argumento entero, sin pasar por la shell, y no se parte.
Cuando el comando modifica o borra, hay una variante prudente: -ok funciona igual que -exec con \;, pero muestra cada comando y espera una confirmación antes de ejecutarlo.
$ find . -name "*.txt" -ok rm {} \;
< rm ... ./notas.txt > ? n
< rm ... ./informe.txt > ? n
13. locate: la búsqueda instantánea
find recorre el disco en el momento, y sobre un árbol grande eso lleva segundos o minutos. locate usa otro método: consulta un índice, una base de datos con las rutas de todos los archivos del sistema, preparada de antemano. Responde al instante.
En Ubuntu hay que instalarlo. El paquete actual se llama plocate:
$ sudo apt install plocate
$ locate os-release
/etc/os-release
/usr/lib/os-release
El argumento no es un patrón sino un fragmento de texto: locate muestra todas las rutas que lo contienen, en cualquier parte, incluidos los nombres de los directorios. Por eso una palabra corta devuelve cientos de líneas, y conviene acotar:
| Comando | Efecto |
|---|---|
locate texto | Las rutas que contienen ese texto. |
locate -i texto | Sin distinguir mayúsculas de minúsculas. |
locate -b texto | Solo si el texto está en el nombre final, no en los directorios. |
locate -c texto | Cuenta las coincidencias, sin mostrarlas. |
locate -l 10 texto | Muestra solo las diez primeras. |
locate "*.conf" | Con comodines, entre comillas, el patrón debe coincidir con la ruta entera. |
La velocidad tiene un precio: el índice es una foto, y puede estar desactualizada. El sistema lo reconstruye una vez por día. Un archivo creado después no aparece, y uno borrado puede seguir figurando.
$ locate practica/notas # creado hoy: el índice todavía no lo conoce
$ sudo updatedb # reconstruir el índice ahora
$ locate practica/notas
/home/ana/practica/notas.txt
El índice tampoco incluye todo: deja fuera, entre otros, /tmp y los discos externos. La comparación completa:
find | locate | |
|---|---|---|
| Cómo busca | Recorre el disco en el momento | Consulta un índice |
| Velocidad | Depende del tamaño del árbol | Instantánea |
| Está al día | Siempre | Hasta la última actualización del índice |
| Busca por | Nombre, tipo, tamaño, fecha, dueño, permisos | Solo el texto de la ruta |
| Puede actuar sobre lo encontrado | Sí | No |
| Está instalado | Siempre | Hay que instalarlo |
Se complementan. locate es para la pregunta rápida «¿dónde hay algo que se llame así?». find es para todo lo demás, y es el que está garantizado en cualquier sistema.
14. Recetas
Las búsquedas reales combinan lo visto. Estas son las que más se repiten; conviene leer cada una reconociendo sus partes: dónde, condiciones y acción.
| Necesito… | Comando |
|---|---|
| Un archivo del que recuerdo parte del nombre | find ~ -iname "*presupuesto*" |
| Los archivos grandes de mi directorio personal | find ~ -type f -size +100M -exec ls -lh {} + |
| Lo que modifiqué en la última hora | find ~ -type f -mmin -60 |
| Qué configuración cambió desde ayer | find /etc -type f -mtime -1 2>/dev/null |
| Los directorios vacíos | find . -type d -empty |
| Todas las imágenes, en cualquier subdirectorio | find . \( -iname "*.jpg" -o -iname "*.png" \) |
| Cuántos archivos hay en un árbol | find . -type f | wc -l |
| Los enlaces simbólicos de un directorio | find /etc -maxdepth 1 -type l |
| Un archivo de configuración, sin saber dónde está | locate -b nombre.conf |
La séptima usa una tubería hacia wc -l, que cuenta líneas: como find escribe una ruta por línea, el resultado es la cantidad de archivos. Es el patrón de trabajo que domina desde el bloque 5: un comando produce una lista y otro la procesa.
Con este tema termina el segundo bloque. Sabes orientarte en el árbol, moverte por él, leer lo que hay en cada directorio, nombrar grupos de archivos y encontrar cualquier cosa. Todo eso fue mirar. En el tema 11 empezamos a modificar: crear, copiar, mover y borrar.
15. Resumen
findrecorre un árbol de directorios completo y selecciona archivos por sus propiedades. Su línea tiene tres partes: dónde, condiciones y acción.- Sin condiciones selecciona todo; sin acción, muestra la ruta de cada resultado.
-namecompara el nombre completo con un patrón, que debe ir entre comillas.-inameno distingue mayúsculas.-type fselecciona archivos,-type ddirectorios y-type lenlaces simbólicos.-sizecompara el tamaño:+Nes más de N y-Nes menos, con las unidadesc,k,MyG.-mtimey-mmincomparan la antigüedad en días y en minutos. El signo menos selecciona lo reciente; el más, lo viejo.- Varias condiciones seguidas deben cumplirse todas.
-oes «o»,!es «no», y\( \)agrupa. -maxdepthlimita cuántos niveles se recorren.- Los avisos
Permission deniedse descartan con2>/dev/null. -deleteborra los resultados y debe ir siempre al final de la línea, después de comprobar la búsqueda.-exec comando {} +ejecuta un comando con todos los resultados; con\;, una vez por cada uno.-okpide confirmación.locatebusca al instante en un índice de rutas, que se actualiza una vez por día o consudo updatedb.
16. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿En qué se diferencia ls *.txt de find . -name "*.txt"?
El comodín solo mira el directorio de trabajo. find recorre también todos los subdirectorios, hasta el fondo.
2. ¿Cuáles son las tres partes de un comando find y qué pasa si se omite cada una?
El punto de partida, que por defecto es el directorio de trabajo; las condiciones, sin las cuales se selecciona todo; y la acción, que por defecto es mostrar la ruta.
3. ¿Por qué el patrón de -name va entre comillas?
Para que la shell no lo expanda con los archivos del directorio de trabajo antes de pasárselo a find.
4. find . -name "informe" no encuentra informe.txt. ¿Por qué?
Porque -name compara el nombre completo. Hay que escribir -name "informe*" o -name "*informe*".
5. ¿Qué seleccionan -size +50M y -size -50M?
Los archivos de más de 50 megabytes y los de menos de 50 megabytes, respectivamente.
6. ¿Qué diferencia hay entre -mtime -3 y -mtime +3?
La primera selecciona lo modificado hace menos de tres días, es decir, lo reciente. La segunda, lo modificado hace más de tres días.
7. Escribe un comando que encuentre los archivos .log de /var/log de más de 10 MB.
find /var/log -type f -name "*.log" -size +10M
8. ¿Por qué en \( -name "*.jpg" -o -name "*.png" \) los paréntesis llevan barra invertida?
Porque el paréntesis es un carácter especial para la shell. La barra lo protege para que llegue a find, que es quien debe interpretarlo.
9. ¿Qué hace -maxdepth 1?
Limita la búsqueda al punto de partida y su contenido directo, sin entrar en los subdirectorios.
10. Una búsqueda en / muestra cientos de líneas «Permission denied». ¿Qué significan y cómo se quitan?
Que find no pudo entrar en directorios restringidos. No es una falla de la búsqueda. Se descartan añadiendo 2>/dev/null, que envía los mensajes de error al sumidero.
11. ¿Por qué es peligroso escribir find . -delete -name "*.bak"?
Porque find evalúa de izquierda a derecha: la acción de borrar se aplica a cada archivo antes de comprobar el nombre, y se borra todo el árbol. -delete debe ir al final.
12. ¿Qué diferencia hay entre terminar un -exec con \; o con +?
Con \; el comando se ejecuta una vez por cada resultado. Con +, una sola vez con todos los resultados como argumentos, lo que es más rápido.
13. ¿Qué representan las llaves {} en -exec?
El lugar donde find escribe la ruta de cada archivo encontrado.
14. Creas un archivo y locate no lo encuentra. ¿Por qué?
Porque locate consulta un índice que se construye una vez por día. Se actualiza con sudo updatedb, o se busca con find, que siempre mira el estado actual.
15. ¿Cuándo conviene locate y cuándo find?
locate, para saber rápidamente dónde hay un archivo con cierto nombre en todo el sistema. find, cuando se busca por tamaño, fecha, tipo o dueño, cuando el resultado debe estar al día, o cuando se quiere actuar sobre lo encontrado.
Para practicar
- Encuentra todos los archivos de
/etccuyo nombre termina en.conf, y cuenta cuántos son con| wc -l. Repite con2>/dev/nully compara lo que ves. - Lista los directorios que están directamente dentro de
/usr, sin entrar en ellos, usandofind. - Encuentra los cinco archivos más grandes de
/usr/bin: busca los de más de 5 MB y muéstralos con-exec ls -lhS {} +. - Averigua qué archivos de tu directorio personal se modificaron en los últimos diez minutos. Ejecuta antes algún comando, para que el historial tenga algo que guardar al cerrar la terminal.
- Busca en
/usr/sharelos archivos cuyo nombre contengabash, sin distinguir mayúsculas. - Encuentra en
~/practicatodo lo que no sea un archivo común. - En
/tmp, crea un directorio de prueba con varios archivos.tmpy.txtusando las llaves del tema 9. Borra solo los.tmpconfind: primero la búsqueda sola, después con-delete. - Compara la salida de
find ~/practica -name "*.txt" -exec echo {} \;con la misma línea terminada en+. - Instala
plocate, ejecutalocate -c binylocate -b -c bin, y explica la diferencia entre los dos números. - Busca con
findlos enlaces simbólicos que hay directamente en/y comprueba el resultado conls -l /.