Mostrando las entradas con la etiqueta scripting. Mostrar todas las entradas
Mostrando las entradas con la etiqueta scripting. Mostrar todas las entradas

Convertir imagenes aun formato diferente

se necesita imagemagick instalado, que es casi un "por defecto" en la mayoría de distros.
con "-sample" se pueden redimensionar las imágenes.

1- crear un archivo en la misma carpeta que las imagenes con el siguiente código

ext="jpg"
for img in `ls *.png`
do
nom=`echo $img | cut -d '.' -f1`
convert -sample 50%x50% $img $nom.$ext
done

2- hacerlo ejecutable:
chmod +x ejemplo.sh

3- ejecutarlo
./ejemplo.sh

Insertar código fuente en una web

Hace tiempo que quería encontrar una forma "decente" de postear código fuente. Ésto incluye 2 cosas: 1 - que esté coloreado, 2 - que no se salga de los márgenes de la página del post.

Buscando por ahi, media solución la encontré en "casa".

1: colorear el cógido

Luego de buscar varias soluciones online para subir el código y que me devolviese el html "coloreado", encontre que nuestro queridisimo Vim ya trae esta función!..

Como ejemplo, un simple script en bash

Presionar "Esc" y escribir (sin comillas) ":TOhtml" y "Enter"

se dividirá la ventana de vim, con el código fuente formateado para html:

1b. Limpiar el código html.
- eliminar las primeras 9 líneas (desde " <!DOCTYPE..", hasta "<br>").
- eliminar las primeras 9 líneas ("<br>",</font></body> y "</html>"
- reemplazar "</font><br>" por "</font>" (para evitar dobles líneas en blanco)
en vim: "Esc" y escribir ":%s/nt><br>/nt>/g"

2. Insertar el código
con éste código, se encierra el código (y ocupo el mismo código para poner el código :)


<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 1px 4px; overflow: auto; line-height: 12pt; background-color: rgb(100, 100, 100); width: 97.5%; max-height: 200px; cursor: text;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;">
<div style="padding: 0px; overflow: visible; border-bottom-style: none; line-height: 12pt; border-right-style: none; background-color: rgb(255, 255, 255); width: 100%; border-top-style: none;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:black;">

<pre>
Insertar código fuente exportado desde Vim aqui!!!
</pre>
</div>
</div>



#!/bin/bash
 contador=0
while [ $contador -lt 10 ]; do
echo The counter is $contador
let contador=contador+1

done

Consultar el Diccionario desde la consola

Con este sencillo script de bash podrás consultar cualquier palabra en el Diccionario de Real Academia de la Lengua Española:

#!/bin/sh
if test -z $1
then
echo "Uso: `basename $0` palabra"
else
echo "Permalink: http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$1&TIPO_HTML=2"
links -dump "http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$1&TIPO_HTML=2"
fi

Es necesario tener instalado el navegador de consola "links", aunque es fácilmente sustituible por "lynx" u otros.


Fuente TrucoLinux.com

ripear todos los videos en un directorio

Tengo un problema con los videos grabados con mi cámara digital, y es que los videos no están comprimidos. Teniendo en cuenta la calidad de la grabación (regular, no es una videocamara), no me importa comprimirlo. Hice un pequeño "script" que utiliza mencoder para comprimir todos los .mpg.
Este script no controla ni errores, ni multiples directorios, ni blablablabla, nada, tengo a mi esposa queriendo organizar fotos, yo tengo que hacer un backup de todo esto y no me entran los videos, Por hice el script para "apurar" trabajo :)
salu2!

Actualización 18/05/08: NO ejecuten sobre videos que estén en particiones ntfs, las corrompe (supongo que escribe demasiado rapido, o no se...)...probablemente tambien afecte el hecho que accedia a través de USB, quizas el buffer....


# comprimir videos en un directorio
#
# Jorge Mestre - LugSaJu

#definimos información necesaria...
# ext: extension de los archivos origen
# ripper: ejecutable del mencoder
# args: argumentos para mencoder

ext=mpg
ripper=$(which mencoder)
args="-oac mp3lame -ovc lavc"

# comprobamos si existe mencoder
# $? equivale al número de error que deja el último comando ejecutado
# 0 es exitoso

if [ $? -ne 0 ];then
echo -e "\nERROR: no se pudo encontrar mencoder, saliendo...\n"
exit
fi

# lista el contenido del directorio,
# lo filtra por extension, y convierte
# las mayusculas a minusculas
archs=(`ls | grep -i $ext`)

for a in ${archs[@]}; do
nomnuevo="$(echo $a | cut -d. -f1)_nuevo.avi"
echo "archivo a ripear: $a"
$ripper $a $args -o $nomnuevo
echo "destino: $nomnuevo"
done

echo -e '\n\t¡¡¡listo campeon!!!!\n'

# fin del script

arreglar conexión wifi

Bueno, mi driver (rt73) de mi wifi usb (Conceptronic54RU) de vez en cuando deja de enviar y recibir datos, por lo cual, me veo obligado a bajar la interfaz, quitar y agregar los módulos y configurar nuevamente la conexión wifi.
Anteriormente hice un post para configurar cuando linux inicia la conexión (cargar los módulos, levantar la interfaz y asignar ip por dhcp).
Luego, hice otro post para explicar como ejecutar scripts periodicamente con cron, especificamente cada 1 minuto.

Bueno, pues aquí posteo el script arreglar_wifi.sh, que hace un ping al router wifi, si no responde, baja la interfaz, descarga los módulos de la nic wifi, borra el lease dhcp y ejecuta el script para configurar wifi.
Cuando detecta que está caida la conexión, envía una alerta general con logger, por lo tanto, kde muestra una ventana con el mensaje.






# arreglar mi wifi cuando se cuelga
# comprueba si llega al Default gateway, si no llega, baja:
# - la IF
# - los módulos relacionados con la NIC wificdd
# - el lease dhcp
# luego levanta con /usr/local/bin/wifi.sh
#
# Jorge Mestre - LugSaJu


# archivo de log
archLog="/var/log/arreglar_wifi.log"


# función para escribir en el log
escLog(){
local fecha=`date +%d/%m/%y\ %H:%M:%S` #fecha con formato: dd/mm/aa hh:mm:ss"
lotexto="$1" # argumento con el que se llamo a la funcion, el texto que se quiere loguear
echo "$fecha: $texto">> $archLog # redirigido al log
# echo "$fecha: $texto" | tee -a $archLog # redirigido al log
} # fin funcion


#definimos información necesaria...
int="wlan0"
modulos=(rt73 rt73usb rt2x00usb rt2x00lib)
archdhcp=/etc/dhcpc/dhcpcd-wlan0.pid

gateway=192.168.1.1


# $? equivale al número de error que deja el último comando ejecutado
# 0 es exitoso


/bin/ping -c 1 $gateway 1> /dev/null

if [ $? -ne 0 ];then
escLog "gateway no responde, enviando una alerta a todo el sistema."
/usr/bin/logger -p emerg "La conexión wifi se ha caido, comienza la restauración..."
escLog "alerta enviada, todo el mundo se ha enterado."


escLog "comienza la restauración."
# baja de la IF
escLog "dando de baja la interfaz $int"
/sbin/ifconfig $int down

# baja de los modulos
for m in ${modulos[@]}; do
/sbin/rmmod $m
escLog "modulo $m quitado"
done
# borrado del lease dhcp
escLog "borrando lease dhcp"
/bin/rm $archdhcp
# llamar al script de configuracion para que vuelva a configurar todo
escLog "llamar al script de configuracion para que vuelva a configurar todo"
escLog "el log del script de configuracion es /var/log/conexion_wifi.log"
/usr/local/bin/wifi.sh



#comprobar si se restauró correctamente.
/bin/ping -c 1 $gateway 1> /dev/null

echo "pinggg $?"
if [ $? -ne 0 ];then
escLog "no se ha restaurado la conexión wifi"
/usr/bin/logger -p emerg "No se pudo restaurar la conexión wifi..."
else
escLog "conexión wifi restaurada!"
/usr/bin/logger -p emerg "conexión wifi restaurada!"
fi
fi


cron, crontab, run-parts

Para ejecutar una tarea cada minuto, utilizaremos crond, el daemon que lee las tareas programadas con crontab por cada usuario.
en Slackware, crond se inicia en modo multiusuario (/etc/rc.d/rc.M).
También Slack utiliza (por convención, no obligatoriamente) el comando run-parts, que sirve para ejecutar todos los scripts que se encuentren dentro de un directorio. Por defecto, en slack existen:

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

o sea, un directorio para cada hora, cada día, cada semana y cada mes.

por defecto, el usuario root tiene el siguiente crontab (crontab -l)

# Run hourly cron jobs at 47 minutes after the hour:
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
#
# Run daily cron jobs at 4:40 every day:
40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null
#
# Run weekly cron jobs at 4:30 on the first day of the week:
30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
#
# Run monthly cron jobs at 4:20 on the first day of the month:
20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null

la clave de la organización está en utilizar el comando run-parts, ya que podemos tener por ejemplo 10 tareas que se ejecuten diariamente (10 scripts dentro de /etc/cron.daily), y en crontab con la entrada que se muestra, sería suficiente (run-parts ejecutaría los scripts que encuentre en /etc/cron.daily)

Por ejemplo, si quiero crear una tarea que se ejecute cada 1 minuto (la unidad mínima de tiempo), podria hacer lo siguiente:
* * * * * /usr/local/bin/scriptPrueba 1> /dev/null

y si tuviese que ejecutar otro script también cada 1 minuto, tendria que agregar

* * * * * /usr/local/bin/scriptPrueba 1> /dev/null
* * * * * /usr/local/bin/OtroscriptPrueba 1> /dev/null

esto lo podemos organizar moviendo ambos scripts (o creando enlaces simbólicos, según se necesite) a un directorio /etc/cron.cada1minuto, y reemplazar las lineas creadas en cron por la siguiente:

* * * * * /usr/bin/run-parts /etc/cron.cada1minuto 1> /dev/null

vmnet que desaparecen

si te desaparecen los dev vmnet*, un "workaround" es crearlos cuando reinicia el sistema (udev los borra al comprobar qué dispositivos existen, como vmware no está arrancado, no los crea).

root@bita:/# cat /etc/rc.d/rc.local
/usr/local/bin/wifi.sh
for a in `seq 0 9`; do mknod /dev/vmnet$a c 119 $a; done
/etc/rc.d/rc.vmware start


en mi rc.local, la primera linea ejecuta un script para conectar la wifi,
la 2º crea los dispositivos con un for
la 3º arranca vmware

como aclaratorio al for:

para la variable "a" en 0,1,2,3,4,5,6,7,8,9 (le indicamos que a va a valer la 1º vez "0", la 2º vez "1", etc.
los tildes invertidos "`", indican que el comando debe ser ejecutado, de hecho, seq es un comando (prueben en su shell: seq 0 5)

entonces,
cuando "a" valga 0, el comando mknod creará /dev/vmnet0 c 119 0;
cuando "a" valga 1, el comando mknod creará /dev/vmnet1 c 119 1;
..
cuando "a" valga9, el comando mknod creará /dev/vmnet9 c 119 9;


recuerden que vmware soporta 100 vmnets, 0-99