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

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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам