need script

George Toft plug-discuss@lists.PLUG.phoenix.az.us
Fri, 27 Apr 2001 17:51:44 -0700


Good point!

George


Jason wrote:

> Nope. Reason: the way the variable is assigned at the very beginning
> loses the filename way before it even has a chance to make mv choke.
> Basically, with the script as shown, the file "Some File" will pass
> thru the script twice, once as "Some", and once as "File", and the
> error message mv will return will be the following:
> 
> mv: ./Some: No such file or directory
> mv: File: No such file or directory
> 
> :-)
> 
> --Try:
> 
> #!/bin/bash
> FILES=`find -type f | sed s/" "/"-SpAcE-"/g`;
> for FILE in $FILES;
> do
>         LOWER=`echo "$FILE" | sed s/"-SpAcE-"/" "/g | tr 'A-Z ' a-z_
> `;
>         UPPER=`echo "$FILE" | sed s/"-SpAcE-"/" "/g`;
>         if (test "$UPPER" != "$LOWER")
>         then
>                 mv "$UPPER" "$LOWER"
>                 echo "$UPPER -> $LOWER"
>         fi
> done
> 
> --
> 
> George Toft wrote:
> 
>> You'll have to enclose $FILE in quotes in the mv command,
>> otherwise you'll get something like this:\
>> FILE <- Some File
>> LOWER <- some_file
>> mv Some File some_file   (which will blow up)
> 
> 
>> Try:
>> mv "$FILE" $LOWER
> 
> 
> 
> 
>> Kurt Granroth wrote:
>> 
>> 
>>> meg@cs.csoft.net wrote:
>>> 
>>> 
>>>> Certainly someone must have a script (preferably Perl)
>>>> laying around somewhere that will:
>>>> 
>>>> Recurse thru directories and rename files by replacing
>>>> any UPPER case characters with lower and replacing spaces
>>>> in the file names with something like underscores.
>>> 
>>> 
>>> Off the top of my head, this might work:
>>> 
>>>  #!/bin/sh
>>>  FILES=`find -type f`;
>>>  for FILE in $FILES;
>>>  do
>>>    LOWER=`echo $FILE | tr 'A-Z ' a-z_`;
>>>    mv $FILE $LOWER;
>>>  done
>>> 
>>> Not tested and won't work if your directories have upper case letters
>>> or spaces.
>>