Date: Wed, 14 Dec 2005 18:48:37 +0100 From: freebsd-questions <freebsd-questions@amadeus.demon.nl> To: user <user@dhp.com>, FreeBSD Questions <freebsd-questions@freebsd.org> Subject: Re: I need a better way to loop in the shell... Message-ID: <7E787746-B0C0-4CBD-B9D1-4E348C638B76@amadeus.demon.nl> In-Reply-To: <Pine.LNX.4.21.0512132340550.8684-100000@shell.dhp.com> References: <Pine.LNX.4.21.0512132340550.8684-100000@shell.dhp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 14 dec 2005, at 05:44, user wrote: > > I always do loops in /bin/sh like this: > > for f in `cat file` ; do rm -rf $f ; done > > Easy. I like doing it like this. > > The problem is, when I am dealing with an input list that has multiple > words per line, this chops it up and treats every word as a new > line... > > For instance, lets say I have a file full of filenames, like this: > > # cat file > > 10,000 Maniacs MTV Unplugged - 01 - These Are Days.mp3 > 10,000 Maniacs MTV Unplugged - 02 - Eat For Two.mp3 > 10,000 Maniacs MTV Unplugged - 03 - Candy Everybody Wants.mp3 > > and I try to use the above loop on it, it thinks that every word is > a line > ... the above loop will attempt to delete the following files: > > 10,000 > Maniacs > MTV > Unplugged > - > 01 > - > These > > (and so on) > > Even if I quote the variable $f, like: > > for f in `cat file` ; do rm -rf "$f" ; done > > it still does the same thing. > > ----- > > So my question is, what is a nice simple way to loop in the shell, as > close to what I am doing above as possible, that does not have this > problem ? Should I just be using something other than `cat` ? Or > what ? > > THanks. > You can also try to store "cat file" into a variable: #!/bin/sh V=`cat file` for f in $V ; do rm -rf $f ; done Arno
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7E787746-B0C0-4CBD-B9D1-4E348C638B76>