This works
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} \;
shopt -u extglob
This returns an error
syntax error near unexpected token `('
function test {
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} \;
shopt -u extglob
}
test
What am I missing, that would permit me to use this in a function?
The problem is bash needs
extglob
to be turned on at two times:when parsing the script
when executing the actual command
By including the
shopt
into the function body, 1. is not satisified. If you broaden the scope of theshopt
to include the function declaration, too, bash will parse the function correctly, but it will fail when running it (i.e. 2. is not satisfied):The error:
So, just turn
shopt extglob
on at the beginning of the script and that's it. Or, if you really need it to be off elsewhere, turn it on and off both inside and outside the function: