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

Quitar los ^M de fin de linea

Con demasiada frecuencia ocurre que importamos un texto de MS-DOS a UNIX, y al editarlo con el vi (por ejemplo), sale lleno de “^M” al final de todas las líneas. Lo primero, decir que no hay problema en el vim, porque si pones la opción “autotext” (:set autotext), el vim automáticamente detecta el tipo de fichero que es (DOS o UNIX), y si es DOS, quita los ^M de la pantalla. Esto de los ^M ocurre porque el delimitador de línea de los ficheros de texto en DOS es CR-LF (carriage return-linefeed, o sea, retorno de carro y salto de línea), y en UNIX son simplemente LF. Así, muchas herramientas de UNIX (al menos por defecto), buscan como delimitador de línea el LF, así que al final de cada línea hay un caracter extraño (el CR).
Esto, en vi, se puede arreglar fácilmente con la orden

Te comento por encima qué significa este chorizo: El “%” sirve para que se sustituya en todas las líneas, y no sólo en la actual, la “s” para que se realice una sustitución, el Ctrl-V Ctrl-M es necesario para que el vi no se crea que estamos pulsando un ENTER (Ctrl-V sirve para insertar literales), y, por supuesto, se sustituye por nada, así que entre la segunda y la tercera barras no ponemos nada.
Por si no te gusta el vi, puedes cambiar el formato de los ficheros de texto desde la línea de órdenes, escribiendo:

Actualización : el ^M copiado de texto a consola se muestra como dos caracteres , pero realmente es uno. En la consola se puede generar con control+v + m con lo que un sed -i ‘d/^M/’ fichero deberia funcionar siempre y cuando ^M sea un solo caracter y no dos.

Publicado en Unix - Linux | Deja un comentario