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. >>