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>