On Monday 02 July 2007 22:47, Alex Schuster wrote:
> Mich writes:
> > I backed up my wife's WinXP fs using K3B and I used default settings
> > which unfortunately converted all file names to CAPITALS and shortened
> > them to 8 characters maximum, just like DOS would do. Is there a clever
> > way to change some of them back to lower case (in batches within given
> > directorates) so that she doesn't have to do it manually one by one? I
> > do not want to change the access times, only the filename case letters.
>
> Create a script like this, name it lowercase.sh or something, and call it
> with "lowercase file1 file2 dir1 dir2". I takes a list of files as
> arguments (use * for all), and also works for directories.
> So, "lowercase ." should convert all files and directories to lowercase.
>
> Put the script into your $PATH, or precede it by its path, e.g.
> ./lowercase. To test it before possible messing up (I just wrote this
> quickly) use the -t option: lowercase -t /path/to/your/files
>
>
> #!/bin/bash
>
> # parse options (-t only)
> while getopts "t" opt
> do
> case $opt in
> t )
> test=true
> ;;
> * )
> exit 1
> esac
> done
>
> shift $(( OPTIND-1 ))
>
> # loop over arguments
> while (( $# ))
> do
> file=$1
> if [[ -d $file ]]
> then
> # call myself
> $0 ${test:+-t} "$file"/*
> elif [[ -f $file ]]
> then
> # conversion to lowercase
> dir=$( dirname "$file" )
> base=$( basename "$file" )
> lower=$( echo "$base" | tr '[:upper:]' '[:lower:]' )
> newfile=${dir:+$dir/}$lower
> [[ $file -ef $newfile ]] ||
> ${test:+echo} mv -v "$file" "$newfile"
> else
> echo "File not found: '$1'"
> fi
> shift
> done
>
>
> AlexThanks 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? -- Regards, Mick
pgp7kYXJICyQ8.pgp
Description: PGP signature

