UNIX – Recursividad en funciones.-

Entre todas las posibilidades que dan las funciones, una de ellas es la recursividad. Una función recursiva es la que se llama a sí misma dentro de su código, es una técnica que se suele usar para simplificar algoritmos complejos. En este apartado podríamos tirarnos un buen rato, pero no estamos aquí para aprender sobre recursividad, por lo que me voy a limitar a explicar un ejemplo típico de la recursividad: el factorial de un numero.

Como vemos, la función factorial recibe un número y con ese número llama recursivamente otra vez a factorial pero decrementado en uno este número, hasta que llega a uno y termina, volviendo hacia atrás y dando el valor de la recursividad por la salida estándar.

Publicado en Unix - Linux | 1 comentario

UNIX – Script BASH muestra saludo según hora.-

Escribir un programa saludo que, según la hora, escriba el saludo correspondiente al nombre de pila del usuario. En el archivo /etc/passwd los usuarios deben estar ingresados con nombre y apellido separados por blanco. Los saludos corresponden a las siguientes horas: Buenos días, de 05:00 hasta 12:59; Buenas tardes, de 13:00 hasta 19:59; Buenas noches 20:00 hasta 04:59. Ejemplo de mensaje: Buenos días, Juan.
A efectos de pruebas, se recibirán la hora y el nombre de login como parámetros, dejando comentados los comandos donde se extrae la hora real y se toma el usuario real.

Publicado en Unix - Linux | Deja un comentario

UNIX – Script para copiar archivos.-

Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.

Publicado en Unix - Linux | Deja un comentario

Script muetra sub directorios.

Recibir un nombre de directorio, validar existencia y condición de directorio y mostrar nombres de todos los directorios y subdirectorios bajo él, en formato de página largo 23.

Publicado en Unix - Linux | Deja un comentario

Diferencias entre “find -exec comando ;”, “find -exec comando +” y “find | xargs comando”

Vamos directamente a un caso practico, moviendo/ 500.000 ficheros/ con find -exec ; tardamos /88 minutos/:

# find /target/tmp/ -type f | wc -l
524275

real 88m23.913s
user 5m12.872s
sys 81m43.738s

Si usamos /-exec comando +/ bajamos a/ 4m30s/:

# ls -1 /target/tmp/ | wc -l
524276

real 4m30.750s
user 0m9.777s
sys 1m35.633s

Y como bonus final, con/ find | xargs/, se tardan/ menos de 3 minutos/:

# ls -1 /target/tmp/ | wc -l
524276

real 2m42.905s
user 3m38.539s
sys 14m5.651s

La explicacion, es que en el primer comando, al usarse/ “-exec comando ;” /, lo que ocurre es que se ejecuta un comando mv por cada fichero. Cuando se usa/ “-exec comando +”/, cada comando es agregado al comando y se ejecuta a continuacion, por lo que, tal y como explica la pagina man de find, esto hace que el total de invocaciones es mucho menor y de ahi esa mejora enorme en el rendimiento. Este compartiendo es el mismo que cuando usamos xargs, la diferencia de rendimiento en este caso radica en usar la opcion /“-P”/ que crea tantos procesos como les indiquemos, o infinitos si usamos /“-P 0”/.

Publicado en Unix - Linux | Deja un comentario