globbing de nome de arquivo da shell e expressões regulares usam alguns dos mesmos caracteres e têm propósitos semelhantes, mas você tem razão, eles não são compatíveis. A globulação de nomes de arquivos é um sistema muito menos poderoso.
Na globulação do nome do arquivo:
-
*
significa "zero ou mais caracteres" -
?
significa "qualquer caractere único"
Mas nas expressões regulares, você precisa usar .*
para significar "zero ou mais caracteres" e .
significa "qualquer caractere único". Um ?
significa algo bem diferente em expressões regulares: zero ou uma instância do elemento RE anterior.
Os colchetes ( []
) parecem funcionar da mesma forma em ambos os sistemas no sistema em que estou digitando, para casos simples, pelo menos. Isso inclui coisas como classes de caracteres POSIX (por exemplo, [:alpha:]
). Dito isso, se você precisar que seus comandos trabalhem com vários tipos de sistema, recomendo que não use nada além de itens elementares, como listas de caracteres (por exemplo, [abeq]
) e talvez intervalos de caracteres (por exemplo, [a-c]
).
Essas diferenças significam que os dois sistemas são apenas intercambiáveis diretamente para casos simples. Se você precisar de correspondência de nomes de arquivos, você precisará fazer isso de outra maneira. find -regex
é uma opção. (Observe que também há find -name
, que usa a sintaxe glob.)