Lynne, thanks for the info...your script produces what I need, except
that my arguments are not on separate lines.  However, I have managed to
write the following script that allows "Program\_Files" to be passed as
'Program Files' to find.  Especially important was the eval ($call)
(also thanks to Cameron).  This seems to have removed the problem that
find was having.  I also think that using the \_ is better than the
question mark and I can replace it with a space in the loop.  Here is
what I ended up with:

#!/bin/sh

paths_to_exclude='/mnt/dosc/windows /mnt/dosc/quickenw
/mnt/dosc/Program\_Files /mnt/dosc/rom_zips'
call="find /mnt/dosc/"

for i in $paths_to_exclude ; do
       i=$(echo $i | sed 's/\\_/ /g')
       call="$call -path '$i' -prune -o"
done

call="$call -print"
echo $call
eval "$call"




Thanks for everyone's help in steering this to a conclusion.

Kirk






Lynne wrote:
Kirk,

Try something like the following - this works for me.  The set -x
provides a
"trace" and should be removed for actual use.

#!/bin/sh
set -x
paths_to_exclude='/tmp/dir1/Program Files
/tmp/fileobJEbT-rep-tarfh
/tmp/orbit*
/tmp/quickenw'

call=`echo "$paths_to_exclude" | ( stuff=
    while read line
    do
        stuff="$stuff -path '$line' -prune -o"
    done
    echo $stuff)`

call="find /tmp/ $call"

call="$call -print"
echo "Calling..."
echo $call
eval $call

Lynne
kirk wrote:

> I am trying to get a list of /mnt/dosc excluding "Program Files" and
> "quickenw" from within this script.  This is a stripped down version of
> what would normally include variables, but it illustrates the concept.
>
> Here is the script:
>
> #!/bin/sh
> paths_to_exclude="/mnt/dosc/Program?Files /mnt/dosc/quickenw"
> call="find /mnt/dosc/"
>
> for i in $paths_to_exclude ; do
>        call="$call -path '"$i"' -prune -o"
> done
>
> call="$call -print"
> echo "Calling..."
> echo $call
> $call
>
> [end script]
>
> Running this script generates the following:
>
> Calling...
> find /mnt/dosc/ -path '/mnt/dosc/Program Files' -prune -o -path
> '/mnt/dosc/quickenw' -prune -o -print
> find: paths must precede expression
> Usage: find [path...] [expression]
>
> However, running the command
> find /mnt/dosc/ -path '/mnt/dosc/Program Files' -prune -o -path
> '/mnt/dosc/quickenw' -prune -o -print
>
> Generates the desired output.
>
> I assume part of the problem is the "?", but I have to keep the string
> together or the for loop breaks it up.  Is there any other way to get
> this thing to go thru the for loop intact?  Also, why does running the
> same command as $call work from the command prompt?
>
> Any help would be appreciated.
>
> Kirk
>
> _______________________________________________
> Redhat-list mailing list
> [EMAIL PROTECTED]
> https://listman.redhat.com/mailman/listinfo/redhat-list



_______________________________________________
Redhat-list mailing list
[EMAIL PROTECTED]
https://listman.redhat.com/mailman/listinfo/redhat-list

Reply via email to