Comportement étrange des caractères génériques `localiser - pourquoi?

9

locate "*.png"renvoie tous les fichiers se terminant par .png, comme prévu.

locate "test.*"ne renvoie rien, mais il y a des fichiers nommés testdans mon système.

locate "*test"renvoie tous les fichiers se terminant par test, comme prévu.

locate "test*"ne renvoie rien, mais il y a des fichiers commençant par testdans mon système.

Pourquoi les caractères génériques semblent-ils fonctionner uniquement pour "se terminant par"?

Vittorio Romeo
la source
1
Avez-vous reconstruit le locatedb après avoir créé les fichiers qui correspondent à test*et test.*?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams: oui
Vittorio Romeo

Réponses:

12

locate "test.*" ne renvoie rien, mais il y a des fichiers nommés test dans mon système.

.est traité comme un point, non pas comme dans un regex comme un caractère arbitraire, donc test.*ne correspond pas test, mais test.foo.

locate "test*"ne renvoie rien, mais il y a des fichiers commençant par testdans mon système.

Locate stocke le chemin complet du fichier , donc pour trouver des fichiers commençant par test, vous devez utiliser locate "*/test*".

Le dernier point peut être déroutant, car il locate footrouve tout ce qui inclut foo, donc le motif est interprété comme *foo*. Il semble que le motif ne soit pas entouré d'étoiles, s'il y a déjà un caractère générique dans le motif.

Avertissement : j'ai fait quelques tests et ce sont mes conclusions, je ne peux pas les prouver en citant la page de manuel, qui semble très rudimentaire.

mpy
la source
3
Dans mon man locateJ'ai: Si --regex n'est pas spécifié, les MOTIFS peuvent contenir des caractères globbing. Si un MOTIF ne contient aucun caractère de globbing, localiser se comporte comme si le motif était * MOTIF *.
gniourf_gniourf