-regex
corresponde ao caminho do arquivo inteiro (não apenas ao nome) e é ancorado por padrão ( ^
e $
implícito).
Aqui, você não precisa de regexps, você pode usar o padrão -name
, que usa um padrão curinga e corresponde ao nome do arquivo, não ao caminho:
find . -name '*hello*' -name '[[:alpha:]][[:alpha:]]-[1-9]*'
Para nomes de arquivos que começam com 2 letras, um hífen e um dígito de 1 a 9 e contêm "olá".
Com regexps, e aqui com FreeBSD / OS / X find
, isso teria que ser:
find -E . -regex '.*hello[^/]*' -regex '.*/[[:alpha:]]{2}-[1-9][^/]*'
Você precisa de [^/]*
em vez de .*
, caso contrário, isso corresponderia a ./aa-9/hello/foo/bar
, por exemplo.
Em qualquer caso, find <dir> *hello*
não faz o que você acha que faz. O shell expande esse *hello*
glob para a lista de arquivos ou diretórios não ocultos no diretório atual cujo nome contém "hello" e passa o resultado como argumentos extras para find
.