Comportamento estranho do caractere curinga `localizar` - por que?

9

locate "*.png"retorna todos os arquivos que terminam com .png, conforme o esperado.

locate "test.*"não retorna nada, mas existem arquivos nomeados testno meu sistema.

locate "*test"retorna todos os arquivos que terminam com test, conforme o esperado.

locate "test*"não retorna nada, mas há arquivos começando testno meu sistema.

Por que os curingas parecem funcionar apenas para "terminar com"?

Vittorio Romeo
fonte
11
Você reconstruiu o localb depois de criar os arquivos que correspondem test*e test.*?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams: sim
Vittorio Romeo

Respostas:

12

locate "test.*" não retorna nada, mas existem arquivos nomeados test no meu sistema.

.é tratado como ponto, não como na expressão regular como um caractere arbitrário; portanto test.*, não corresponde test, mas test.foo.

locate "test*"não retorna nada, mas há arquivos começando testno meu sistema.

localize armazena o caminho completo para o arquivo , portanto, para encontrar arquivos começando com teste, você deve usar locate "*/test*".

O último ponto pode ser confuso, pois locate fooencontra qualquer coisa que inclua foo; portanto, o padrão é interpretado como *foo*. Parece que o padrão não está entre estrelas, se já houver um curinga no padrão.

Isenção de responsabilidade : fiz alguns testes e estas são minhas conclusões, não posso prová-las citando a página de manual, que parece muito rudimentar.

mpy
fonte
3
No meu man locateeu tenho: Se --regex não for especificado, PATTERNs podem conter caracteres brilhantes. Se algum PADRÃO não contiver caracteres brilhantes, localize-se como se o padrão fosse * PADRÃO *.
gniourf_gniourf