Skip site navigation (1)Skip section navigation (2)
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>