Renombrar archivos .JPG a .jpg

En ocasiones tenemos programas que no reconocen archivos con la extensión en mayúsculas, ignoro por qué.

Gracias al jiapei100 en el foro de unix.com tenemos este simplísimo script en bash para poder renombrar fácilmente todos los archivos:

for x in *.JPG; do mv "$x" "${x%.JPG}.jpg"; done

Cuando usar ls y cuando usar find

En general, a la hora de hacer scripts con listados de archivos y directorios, el comando “ls” es más que suficiente.

Sin embargo, a la hora de querer hacer un listado con la ruta completa, haciendo ls -R,  el resultado es parecido a este:

# ls -R

dir:
arch1 arch2 arch 3 arch4

Este tipo de salida, es difícil de procesar, después en los scripts.  Lo deseable es contar  con salidas:

dir/arch1
dir/arch2
dir/arch3
dir/arch4

Para conseguir esto, lo útil es usar find con un modificador de profundidad, para evitar que se listen todos los niveles de la jerarquía:

find /dir/* -maxdepth 0′

Os dejo un enlace al manual, para ver otros modificadores: http://unixhelp.ed.ac.uk/CGI/man-cgi?find

La gestión de los logs en bash script.

Tener trazas es vital para encontrar los problemas cuando ocurren. Y ocurren. Vamos a ver hoy como hacer una gestión de creación, trazado y borrado de logs en nuestros propios scripts.

Donde se guardan los logs

Por defecto, los ficheros de log se guardan en la carpeta /var/log/X, siendo X el programa que los generó.

En mi caso, por problemas de permisos en la máquina donde los ejecuto, los guardo en /tmp.

Crear el fichero de log

Para tener más información, mis ficheros de log contienen en su nombre qué usuario es el que generó la traza.

LOG=/tmp/$APP.$(whoami).log

Mensajes de log

Cada mensaje de log, está identificado por la aplicación que lo generó, así como la hora minuto y segundo en que se generó la línea:

function log {

echo [$APP $(date +%H:%M:%S)] $@ >> $LOG

}

El uso de esta función sería:

log ‘mensaje de prueba 1. Ejecuto en directorio’ $PWD

Sentíos libros de añadir cualquier información más a la traza.

Borrar las trazas cuando exceden de un determinado tamaño.

No se puede llenar el sistema de archivos. Sobre todo cuando es una tarea periódica que ejecuta, por ejemplo todos los días.

Por ello, antes de empezar cada ejecución yo tengo una función de validar si el log ya existe, y, si excede un determinado tamaño, se borra y se empieza uno nuevo

function openLog {

LOG_LOG=$1

LOG_APP=$2

# If log is bigger than maxsize, delete it

if [ -e $LOG_LOG ] ; then

SIZE=$(stat -c %s $LOG_LOG)

if [ $SIZE -gt $MAXSIZE ] ; then

echo ‘borrando log’

rm -rf $LOG_LOG

fi;

fi;

# Create log if it doesn’t exist.

if [ ! -e $LOG_LOG ]; then

touch $LOG_LOG

fi;

}

# Create log if it doesn’t exist.

if [ ! -e $LOG ]

touch $LOG

}

Conclusiones

Es, por tanto, necesario comenzar siempre la ejecución de nuestros script abriendo el fichero de log, que lo creará si no existe o lo borrará si es demasiado grande.

Sentíos libres de utilizar y mejorar estas funciones ampliando su funcionalidad o la cantidad de información que vuelcan al sistema.