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