#!/bin/sh

usage() {
   echo "Usage: $0 -{u,l} [-q] -d <dirname>" 
   echo "      u : Change all filenames to upper case"
   echo "      l : Change all filenames to lower case"
   echo "      q : quiet dont display anything       "
   echo "      d : change filename in directory <dirname> "
}

# If no arguments, display usage and exit with success
test "$1" || { usage; exit 0; }

OUTPUT=/dev/stdout

while getopts ulhqd: i; do
        case $i in
                u) FROM='[[:lower:]]'; TO='[[:upper:]]' ;;
                l) TO='[[:lower:]]'; FROM='[[:upper:]]' ;;
                d) BASEDIR="$OPTARG" ;;
                q) OUTPUT=/dev/null ;;
                h) usage; exit 0 ;;
                ?) usage; exit 1 ;;
        esac
done

test $# -ge $OPTIND && { 
   echo "Unknown argument [${!OPTIND}]" > $OUTPUT; 
   echo "Try $0 -h for usage" > $OUTPUT; 
   exit 1; }

pushd "$BASEDIR" > /dev/null 2>/dev/null
test $? -gt 0 && { 
   echo "Directory $BASEDIR not found" > $OUTPUT; 
   exit 1; }

find "." -depth | while read f; do
    BASE="`basename \"$f\"`"
    DIR="`dirname \"$f\"`"
    NEW="$DIR"/"`echo \"$BASE\" | tr $FROM $TO `"
    test "$f" != "$NEW" && mv "$f" "$NEW"
done
popd > /dev/null

