[OT] shell quoting

Alexander Kirillov nevis2us at infoline.su
Thu Sep 20 07:22:32 UTC 2007


>> I need to compare two different versions of a source tree
>> excluding certain directories and print out some statistics
>> on the files which have been changed, removed or added.
>>
>> Here comes a boiled down example of the problem I'm having.
>> Let's say there are 4 files in the current directory:
>>
>> ./aa
>> ./aaa
>> ./bb
>> ./bbb
>>
>> and I want to exclude all paths starting with ./bb
>> This one is easy:
>>
>> find . ! -path './bb*'
>>
>> Now I want to make it into a generic script:
>>
>> DIR=.
>> OPT='! -path $DIR/bb*'
>> find $DIR $OPT
>>
>> $DIR and * within OPT are essential
>> and no matter what I've tried I can't get the parameter expansion right.
>>
>> Any suggestions will be appreciated,
> 
> I couldn't get * to expand later either.  Backslashes didn't help.  What I
> finally did was like:
> 
>     opt1='! -path $dir/bb<wild>'
>     opt = `echo $opt1 | sed 's|<wild>|*|'`
>     find $dir $opt

Hi Tony,
Actually I was trying to achieve just the opposite: to prevent * expansion.
And the only solution I've found so far was to explicitly forbid
pathname expansion with shell -f option:

DIR=.
OPT='! -path '$DIR'/bb*'
set -f
find $DIR $OPT




More information about the users mailing list