Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Dec 2005 23:44:42 -0500 (EST)
From:      user <user@dhp.com>
To:        freebsd-questions@freebsd.org
Subject:   I need a better way to loop in the shell...
Message-ID:  <Pine.LNX.4.21.0512132340550.8684-100000@shell.dhp.com>

next in thread | raw e-mail | index | archive | help

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.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.21.0512132340550.8684-100000>