From owner-freebsd-questions@FreeBSD.ORG Wed Dec 14 04:44:44 2005 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8A35D16A41F for ; Wed, 14 Dec 2005 04:44:44 +0000 (GMT) (envelope-from user@dhp.com) Received: from shell.dhp.com (shell.dhp.com [199.245.105.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1BABB43D5A for ; Wed, 14 Dec 2005 04:44:44 +0000 (GMT) (envelope-from user@dhp.com) Received: by shell.dhp.com (Postfix, from userid 896) id E339931365; Tue, 13 Dec 2005 23:44:42 -0500 (EST) Date: Tue, 13 Dec 2005 23:44:42 -0500 (EST) From: user To: freebsd-questions@freebsd.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: I need a better way to loop in the shell... X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Dec 2005 04:44:44 -0000 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.