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"?


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.