#!/bin/sh # move-to-lower -- rename files to lower/upper case... # $Id: move-to-lower,v 1.3 1998/07/10 19:14:27 cdua Exp cdua $ # Carlos Duarte, 960904/960904 # usage: # move-to-lower * # move-to-upper * # or # move-to-lower -r . # move-to-upper -r . # # move-to-any -u ; force move to upper # move-to-any -l ; force move to lower # #trap -- 'rm -f /tmp/xpto' EXIT SIGINT USAGE="\ usage: $0 [-n] [-r] [-h] files... -n do nothing, only see what would be done -r recursive (use find) -h this message -u force to upper -l force to lower files files to remap to lower case converts filename from lower to upper case, or vice-versa. eg: $0 -n * (see if everything is ok, then...) $0 * $0 -r . " cmd=sh finder='echo $* | tr \ "" \\012' while : ; do case x"$1" in x-h) echo "$USAGE"; exit 1 ;; x-n) cmd=cat ;; x-x) cmd=sh\ -x ;; x-r) finder='find $* -type f' ;; x-u) TOU=y ;; x-l) TOU=n ;; x--) shift; break ;; x-?) echo "invalid option -- `echo $1|cut -c2-`" echo "$USAGE"; exit 1 ;; *) break ;; esac shift done # if _must_ accept on extra argument after options if test $# -eq 0; then echo "$USAGE"; exit 1; fi LOWER='abcdefghijklmnopqrstuvwxyz' UPPER='ABCDEFGHIJKLMNOPQRSTUVWXYZ' test X$TOU = X && case `basename $0` in *lower* ) TOU=n ;; *upper* ) TOU=y ;; esac test X$TOU = X && TOU=y if test X$TOU = Xy ; then FROM=$LOWER TO=$UPPER else FROM=$UPPER TO=$LOWER fi eval $finder | sed -e 's,/*$,,' -e '\,/,!s,^,./,' -e h -e 's,.*/,,' \ -e "y/$FROM/$TO/" -e x -e G -e '\,^.*/\(.*\)\n\1,d' \ -e 's,^\(.*/\)\(.*\)\n\(.*\)$,mv \1\2 \1\3,' | $cmd #exit 0 exit