locate "*.png"
zwraca wszystkie pliki kończące się na .png
, zgodnie z oczekiwaniami.
locate "test.*"
nic nie zwraca, ale test
w 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 test
w moim systemie są pliki zaczynające się od
Dlaczego symbole wieloznaczne wydają się działać tylko do „kończenia na”?
test*
itest.*
?Odpowiedzi:
.
jest traktowany jak kropka, a nie w wyrażeniach regularnych jako dowolny znak, więctest.*
nie pasujetest
, aletest.foo
.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 foo
znajduje cokolwiekfoo
, 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.
źródło
man locate
mam: 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 *.