Date: Fri, 14 Oct 2005 13:07:00 -0700 From: Drew Tomlinson <drew@mykitchentable.net> To: David Kirchner <dpk@dpk.net> Cc: FreeBSD Questions <freebsd-questions@freebsd.org> Subject: Re: Help With 'for' Loop Message-ID: <43500FE4.30809@mykitchentable.net> In-Reply-To: <35c231bf0510141252o506328d8qf68d80faa9c2330d@mail.gmail.com> References: <435007F3.8000106@mykitchentable.net> <35c231bf0510141252o506328d8qf68d80faa9c2330d@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 10/14/2005 12:52 PM David Kirchner wrote:
>On 10/14/05, Drew Tomlinson <drew@mykitchentable.net> wrote:
>
>
>>Sorry to be such a pest today. I'm working on a sh script that uses a
>>for loop. To test, I've written the following:
>>
>>for i in `/usr/bin/find /multimedia/Pictures -iname "*.jpg" -or -iname
>>"*.gif" -print`
>> do
>> echo -e "\n$i"
>>done
>>
>>The first line 'find' returns is "/multimedia/Pictures/1998
>>Christmas/April01.JPG"
>>
>>Yet 'echo $i' only returns "/multimedia/Pictures/1998", stopping at the
>>first space. Is it possible to get 'i' to represent the whole string
>>that 'find' returns? If so, how?
>>
>>
>
>'while read i' will do what you want, but may cause issues with
>programs that expect to be able to read from stdin within the loop.
>
>find $findstuff | while read i
>do
> echo $i
>done
>
>
Thank you for your reply. I just tried 'while read i' and it works in
this context. I'll find out soon enough if I have the stdin trouble you
mention. I don't think I will but I'm very new to script writing.
What I am ultimately attempting is to recursively search a directory and
then create symlinks with modified names in a new directory to files in
the first directory. For example, the first file found is
"/multimedia/Pictures/1998 Christmas/April01.JPG". After saving this
string in 'i' (or maybe a more descriptive name), I want to manipulate
the string to be "1998_Christmas-April01.JPG" and then issue 'ln -s
"/multimedia/Pictures/1998 Christmas/April01.JPG"
/newdir/1998_Christmas-April01.JPG'. I've fiddled a bit with 'sed' and
think I can make it work but I'm sure I'll be back with more questions. :)
>You can also try something like:
>
>find $findstuff -exec echo {} \;
>
>(where $findstuff is your -iname conditionals). {} is replaced by the
>files or directories found by find, and \; is necessary to terminate
>the -exec argument.
>
>
Another good idea although I don't think this will work as well for my
purpose.
Thanks again,
Drew
--
Visit The Alchemist's Warehouse
Magic Tricks, DVDs, Videos, Books, & More!
http://www.alchemistswarehouse.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43500FE4.30809>
