On Monday 09 July 2007 00:00, Alex Schuster wrote:
> Mick writes:
> > Thanks Alex, I was trying your script, but just like Etaoin's script it
> > does not go beyond level 1 in the directory. All the subdirectories and
> > files within them stay in Capital Case.
> >
> > How can I change it to recursively look into the directory?
>
> That's strange. I tried that and had no problem.
>
> Here's a slightly enhanced version with more options. -h shows a help, -d
> also converts directories, -r turns recursive operation on, and -u would
> convert into uppercase instead. So you would use it like that:
> lowercase -dr *
> This assumes you also want the directory names converted. Leave the -d
> option off if not. And add a -t first so you see what would be done, in
> case the script would mess things up. It seems to work, but was written
> rather quickly. If all seems okay, start it again without the -t.
>
> If it still don't work, you can also use the find command to process each
> file individually:
> find . -exec lowercase -d \{\} \;
> Or this if you like to change files only:
> find . -type f -exec lowercase \{\} \;
>
> Feel free to email me directly if you are still having trouble, so we won't
> bother the list.
After some tests and minor changes that Alex introduced, I have had success
with Alex's script as follows:
==================================================
#!/bin/bash
##########################################################
# #
# Change case of files and directories. #
# #
# Written by Alex Schuster ([EMAIL PROTECTED]) #
# #
# Use at your own risk. #
# Feel free to do anything you want with it. #
# Please send me an e-mail if you think you improved it. #
# #
##########################################################
# parse command line options
unset oDir oRec oTest oUpper
while getopts "dhrtu" opt
do
case $opt in
h )
echo "
${0##*/} [-dhrtu] files...
Convert files into lowercase
Options:
-d convert directories, too
-h show this help
-r recursive
-t test, show what would be done
-u change to uppercase instead
"
exit 0
;;
d ) oDir=true ;;
r ) oRec=true ;;
t ) oTest=true ;;
u ) oUpper=true ;;
* ) exit 2
esac
done
shift $(( OPTIND-1 ))
# decide whether to convert to lowercase or uppercase
if [[ $oUpper ]]
then
from=[:lower:]
to=[:upper:]
else
from=[:upper:]
to=[:lower:]
fi
if ! (( $# ))
then
echo "Usage:"
$0 -h
exit 1
fi
# loop over arguments
while (( $# ))
do
aFile=$1
shift
# check if file exists
if ! [[ -e $aFile ]]
then
echo "File not found: '$aFile'"
continue
fi
# is argument a directory?
if [[ -d $aFile ]]
then
# remember original date of directory before renaming contents
[[ $oTest ]] ||
date=$( ls -ld --full-time "$aFile" |
awk '{ print $6" "$7 }' |
sed 's/.00000*//g' )
# process non-empty directories recursively first
[[ $oRec ]] && [[ $( ls -A "$aFile" ) ]] &&
$0 ${oDir:+-d} ${oTest:+-t} ${oUpper:+-u} -r "$aFile"/*
# skip renaming of directories without -d option
[[ -d $aFile ]] && ! [[ $oDir ]] && continue
fi
# create new name
dir=$( dirname "$aFile" )
base=$( basename "$aFile" )
newFile=${dir:+$dir/}$( echo "$base" | tr "$from" "$to" )
# rename file if necessary
if ! [[ $aFile -ef $newFile ]]
then
${oTest:+echo} mv -v "$aFile" "$newFile"
# re-set date of directories
if [[ -d $newFile ]] && ! [[ $oTest ]]
then
touch -d "$date" "$newFile"
fi
fi
done
exit 0
==================================================
Thank you all and particularly Alex for your time and your help! :)
--
Regards,
Mick
pgpNBJ80ZaDFW.pgp
Description: PGP signature

