Sua expressão regular tem dois erros:
-
Ele perde um ponto (literal) depois de
foo
. -
find
exige que você escape dos parênteses quando não é usado como parênteses literais.
Além disso, você deve escapar do ponto antes de sh
, pois ele corresponderá a qualquer caractere.
O comando fixo agora lê:
find . -regex ".*foo\(\.bar[0-9]\)?\.sh"
O erro 2, a propósito, é o motivo pelo qual eu não gosto da opção find
-regex
: escape inconsistente.
Funciona, é claro, mas grep -P
usa expressões regulares compatíveis com Perl (PCRE), portanto, há mais recursos, mas menos surpresas e armadilhas.
Pessoalmente, eu usaria:
find . | grep -P "foo(\.bar\d)?\.sh"