Per Jessen wrote:
Dominique Leuenberger wrote:
On 4/21/2009 at 11:37, Per Jessen <per@opensuse.org> wrote:
Dominique Leuenberger wrote:
Hi,
I'm busy writing a script that does 'something' with every file found.
It does something like:
for a in $( find /mnt/Data/Todo -type f -exec basename {} \; ); do /usr/bin/stcommand $a /usr/bin/2ndcommand $a done
The problem here is simply: it works only as long as the filename does not contain any whitechars :(
Is there a good way to get around this?
Put $a in double qoutes.
Per, that solution was to easy and of course is not true (the original script actually has them quoted)
The problem happens in line for a already where 'for' is splitting the array of chars at the white chars.
I guess it I didn't take enough time to read through everything, sorry. How about this slightly changed script: (not tested)
find /mnt/Data/Todo -type f -exec basename {} \; | while read a do /usr/bin/stcommand $a /usr/bin/2ndcommand $a done
Rather, set -f find /path/to/stuff -type f | while read do { a="${REPLY##*/}" something "$a" else "$a" } </dev/null done Otherwise it only works if you happen to be lucky and none of the commands happens to read stdin. Never rely on luck or assume that something is right just because you tried it and it worked. Also, less important, spawning a process every iteration just for basename is unnecessary. But note the real way is to find out what the commands actually are and how they behave and what the ultimate goal is and probably determine that a while read loop is probably wrong in the first place, in favor of "find -print0 |xargs -0" and thereby not care what crazy characters might be in the names. ... and I see someone else already posted exactly the part I didn't want to stop to figure out, how to use a list of commands as the argument to xargs. THAT is by far the most correct and robust approach even if, being untested, Boyd's off the cuff sample turns out to need adjusting to work. -- bkw -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org