`locate` wildcard дивна поведінка - чому?


9

locate "*.png"повертає всі файли, що закінчуються .png, як очікувалося.

locate "test.*"нічого не повертає, але є файли, названі testв моїй системі.

locate "*test"повертає всі файли, що закінчуються test, як очікувалося.

locate "test*"не повертає нічого, але є файли, починаючи з testмоєї системи.

Чому, мабуть, символи підказки працюють лише на "закінчення"?


1
Чи відбудували ви розташувану адресуb після створення файлів, які відповідають test*і test.*?
Ігнасіо Васкес-Абрамс

@ IgnacioVazquez-Abrams: так
Вітторіо Ромео

Відповіді:


12

locate "test.*" нічого не повертає, але в моїй системі є файли з ім'ям test.

.трактується як крапка, а не як у регулярному вираженні як довільний символ, тому test.*не відповідає test, але test.foo.

locate "test*"не повертає нічого, але є файли, починаючи з testмоєї системи.

locate зберігає повний шлях до файлу , тому для пошуку файлів, що починаються з тесту, вам слід скористатися locate "*/test*".

Остання точка може бути заплутаною, оскільки locate fooзнаходить що-небудь, в тому числі foo, тому шаблон трактується як *foo*. Здається, що візерунок не укладений у зірки, якщо в малюнку вже є один підстановочний знак.

Відмова : Я зробив деякий тест, і це мої висновки, я не можу їх довести, посилаючись на довідкову сторінку, що здається дуже рудиментарним.


3
У моєму випадку man locateє: Якщо --regex не вказано, PATTERN можуть містити символи глобалізації. Якщо будь-який PATTERN не містить глобальних символів, знайдіть поведінку так, як якщо б шаблон був * PATTERN *.
gniourf_gniourf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.