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

4402
Vittorio Romeo

locate "*.png"возвращает все файлы, оканчивающиеся на .png, как и ожидалось.

locate "test.*"ничего не возвращает, но testв моей системе есть файлы с именами .

locate "*test"возвращает все файлы, оканчивающиеся на test, как и ожидалось.

locate "test*"ничего не возвращает, но testв моей системе есть файлы, начинающиеся с .

Почему подстановочные знаки, кажется, работают только для "окончания"?

9
Вы перестроили файл selectedb после создания файлов, которые соответствуют `test *` и `test. *`? Ignacio Vazquez-Abrams 10 лет назад 1
@ IgnacioVazquez-Abrams: да Vittorio Romeo 10 лет назад 0

1 ответ на вопрос

10
mpy

locate "test.*" ничего не возвращает, но в моей системе есть файлы с именем test.

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

locate "test*"ничего не возвращает, но testв моей системе есть файлы, начинающиеся с .

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

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

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

В моем `man locate` у меня есть: _If --regex не указан, PATTERN могут содержать символы-заглушки. Если какой-либо PATTERN не содержит символов-заглушки, locate ведет себя так, как если бы шаблон был \ * PATTERN * ._ gniourf_gniourf 10 лет назад 3

Похожие вопросы