Date: Mon, 01 Oct 2001 08:38:35 -0300 From: "Daniel C. Sobral" <dcs@newsguy.com> To: "Eugene L. Vorokov" <vel@bugz.infotecs.ru> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: how to make 'for' understand two words as a single argument Message-ID: <3BB855BB.D10C5030@newsguy.com> References: <200110011039.f91AdOD88292@bugz.infotecs.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
"Eugene L. Vorokov" wrote:
>
> I have a script which is supposed to convert all filenames to lowercase
> recursively from current directory. It looks like:
>
> echo "Processing files"
> for i in `ls |grep [A-Z]`; \
> do mv $i `echo $i |tr [A-Z] [a-z]`; echo $i;\
> done;
> for i in `find . -name "*" -type d -maxdepth 1`;\
> do if [ $i != "." ]; then cd $i; echo "Processing sub-dir $i"; $0; cd ..; fi \
> done;
>
> It works fine unless some file or directory has a space in it's name.
> It this case each word is interpreted as a separate argument by 'for'
> and script doesn't find files.
Any way using `` won't work. for i in a "b c" d works, for instance, but
there is not way that I know of that you can control the output this way
using ``.
OTOH, try:
find . -type d -maxdepth 1 -print -exec mv {} `echo {} | tr [A-Z] [a-z]`
\;
--
Daniel C. Sobral (8-DCS)
dcs@newsguy.com
dcs@freebsd.org
capo@the.secret.bsdconspiracy.net
wow regex humor... I'm a geek
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3BB855BB.D10C5030>
