But I cannot come up with an equivalent in glob syntax.
Eu não acho que você pode, já que globs regulares não têm alternância ou agrupamento. O mais próximo que você poderia conseguir seria version*
, mas claro que isso também combina com outros.
Embora com um glob estendido no estilo ksh ou com zsh, você pode:
(Bash)
$ shopt -s globstar
$ shopt -s extglob
$ echo **/version?(.h)
(ksh)
$ set -o globstar
$ echo **/version?(.h)
(zsh)
% echo **/version(|.h)
Muitas versões de find
também podem usar regexes, mas as variantes de regex disponíveis são diferentes. O BSD find
padroniza as regexes básicas (BRE), mas suporta regexes estendidas com o sinal -E
:
$ find -E . -regex ".*/version(\.h)?"
No GNU find
, o padrão é diferente (*) , mas:
$ find . -regextype posix-extended -regex ".*/version(\.h)?"
Ou você poderia usar a solução simples, que Jeff sugeriu:
$ find . -name version -o -name version.h
Tenha em atenção que, se adicionar uma ação explícita (em vez da impressão predefinida), necessita de parênteses como em:
$ find . \( -name version -o -name version.h \) -a -exec ls -ld {} +
como -a
(implícito quando omitido) tem precedência sobre -o
.
(* na verdade, o manual de referência para o GNU find não parece ser capaz de decidir qual é o formato de regex padrão, compare o exemple duas entradas aqui .)