странное поведение `locate` - почему?

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 хранит полный путь к файлу , поэтому для поиска файлов, начинающихся с test, следует использовать locate "*/test*".

Последний пункт может сбивать с толку, так как locate fooнаходит что-либо в том числе foo, поэтому шаблон интерпретируется как *foo*. Кажется, что шаблон не заключен в звезды, если в шаблоне уже есть один подстановочный знак.

Отказ от ответственности : я провел некоторые тесты, и это мои выводы, я не могу доказать их, ссылаясь на справочную страницу, которая кажется очень элементарной.

МРУ
источник
3
По моему, у man locateменя есть: Если --regex не указан, PATTERN могут содержать символы-заглушки. Если какой-либо PATTERN не содержит символов-заглушки, locate ведет себя так, как если бы шаблон был * PATTERN *.
gniourf_gniourf