Renombrado de ficheros de minúsculas a mayúsculas

Solapas principales

Nombre: min2may
Autor: José Luis García Pallero
Lenguaje: Bash
Licencia: GPL v.3 o superior
Propósito: Renombra archivos de minúsculas a mayúsculas
Dependencias: Bash

Código:

#!/bin/bash

# Verificación del número de argumentos de entrada
if [ $# -eq 0 ]; then
    echo
    echo "(C), 2010, José Luis García Pallero, jgpallero@gmail.com"
    echo "Este programa queda sujeto a la GPLv3 o superior (www.fsf.org)"
    echo
    echo "`basename $0`: paso de nombres de archivos de minúsculas a mayúsculas"
    echo
    echo "  `basename $0` [-r] [-d] archivos"
    echo
    echo "    -r: indicador de cambio de nombre recursivo (subdirectorios)"
    echo "    -d: indicador de cambio de nombre a los directorios"
    echo "    archivos: archivos cuyo nombre hay que cambiar"
    echo
    exit 0
fi
################################################################################
#nombre de este script
NPROG=`echo $0`
#variables indicadoras de conversión recursiva y renombrado de directorios
RECUR=0
DIREC=0
#comprobamos si hay que convertir los directorios de forma recursiva
for i in $*; do
    #capturamos los posibles argumentos optativos
    if [ "$i" == "-r" ]; then
        #indicamos conversión recursiva
        RECUR=1
        #añadimos el argumento optativo
        AOPT+=" -r"
    elif [ "$i" == "-d" ]; then
        #indicamos renombrado de directorios
        DIREC=1
        #añadimos el argumento optativo
        AOPT+=" -d"
    fi
done
################################################################################
#recorremos todos los argumentos de entrada
for i in $*; do
    #sólo trabajamos si el archivo existe
    if [ -a "$i" ]; then
        #nos quedamos con el nombre de la ruta hasta el archivo
        NRUTA=`dirname $i`
        #nos quedamos con el nombre del archivo
        NARCH=`basename $i`
        #pasamos el nombre del archivo a mayúsculas
        NMAY=`echo $NARCH | tr '[:lower:]' '[:upper:]'`
        #distinguimos entre directorio y archivo regular
        if [ -d "$i" ]; then
            #renombramos lo que hay dentro, si ha lugar
            if [ $RECUR -eq 1 ]; then
                $NPROG $AOPT $i/*
            fi
            #renombramos, si ha lugar
            if [ $DIREC -eq 1 ] && [ "$NMAY" != "$NARCH" ]; then
                #renombramos
                mv $i $NRUTA/$NMAY
            fi
        else
            #sólo renombramos si el nombre no está ya en mayúsculas
            if [ "$NMAY" != "$NARCH" ]; then
                #renombramos
                mv $i $NRUTA/$NMAY
            fi
        fi
    fi
done

Ejemplos de uso: min2may ruta/*, min2may -r ruta/*, min2may -d ruta/*, min2may -d -r ruta/*,
Comentarios: No sé si habrá algún comando de UNIX para hacer esta tarea, pero tardo menos en hacer el script que en buscarlo.