dziwne zachowanie `zlokalizuj 'symbol wieloznaczny - dlaczego?

9

locate "*.png"zwraca wszystkie pliki kończące się na .png, zgodnie z oczekiwaniami.

locate "test.*"nic nie zwraca, ale testw moim systemie są pliki o nazwach .

locate "*test"zwraca wszystkie pliki kończące się na test, zgodnie z oczekiwaniami.

locate "test*"nic nie zwraca, ale testw moim systemie są pliki zaczynające się od

Dlaczego symbole wieloznaczne wydają się działać tylko do „kończenia na”?

Vittorio Romeo
źródło
1
Czy odbudowałeś zlokalizowany plikb po utworzeniu pasujących plików test*i test.*?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams: tak
Vittorio Romeo

Odpowiedzi:

12

locate "test.*" nic nie zwraca, ale w moim systemie są pliki o nazwie test.

.jest traktowany jak kropka, a nie w wyrażeniach regularnych jako dowolny znak, więc test.*nie pasuje test, ale test.foo.

locate "test*"nic nie zwraca, ale testw moim systemie są pliki zaczynające się od

locate przechowuje pełną ścieżkę do pliku , więc aby znaleźć pliki zaczynające się od testu, powinieneś użyć locate "*/test*".

Ostatni punkt może być mylący, ponieważ locate fooznajduje cokolwiek foo, w tym wzorzec jest interpretowany jako *foo*. Wygląda na to, że wzór nie jest zawarty w gwiazdach, jeśli we wzorze znajduje się już jeden symbol wieloznaczny.

Uwaga : Zrobiłem kilka testów i takie są moje wnioski, nie mogę ich udowodnić, powołując się na stronę podręcznika, która wydaje się bardzo szczątkowa.

mpy
źródło
3
W moim man locatemam: Jeśli --regex nie jest określony, WZORY mogą zawierać znaki globowania. Jeśli jakikolwiek WZÓR nie zawiera znaków globowania, locate zachowuje się tak, jakby wzorzec to * WZÓR *.
gniourf_gniourf