grep
usa expressões regulares , não shell globs .
A regex 0000:00:*.0/usb1/authorized_default
corresponde à string 0000:00
+ zero ou mais dois-pontos + qualquer caractere + 0/usb1/authorized_default
.
Se você trocar o *
e o .
, ele corresponderá a qualquer string que contenha 0000:00
seguido por 0/usb1/authorized_default
. ( .*
corresponde a qualquer número ( *
) de qualquer caractere ( .
).)
Da mesma forma, usb*/
corresponderá a us/
, usb/
, usbbb/
etc, mas não usb1
.
Na verdade, há também o problema de que o *
não-referenciado no argumento para grep
é considerado como um caractere de glob pelo shell , antes que grep
o veja. Portanto, se houver arquivos que correspondam a 0000\:00\:*.0/usb*/authorized_default
como um padrão glob, isso afetará a sequência que vai para grep
. Múltiplas correspondências iriam como vários argumentos e grep
usaria os primeiros após o primeiro como nomes de arquivo.
Coloque aspas em torno de quaisquer expressões regulares na linha de comando para evitar isso.
Em qualquer caso, você nem precisa do grep
aqui, como diz @Kusalananda. A opção -name
para find
pode ser usada para corresponder nomes de arquivos a um padrão glob. Pelo menos algumas implementações de find
também têm a opção -regex
para corresponder nomes de arquivos a expressões regulares.
Há também várias variantes de expressões regulares, consulte: Por que minha expressão regular funciona em X, mas não em Y