Когда я нахожусь в моем домашнем каталоге и набираю locate *.cpp
, я получаю сотни результатов.
Используя ту же команду в (например) ~/../forfun/netstream/
, я вижу только несколько результатов.
Как это возможно?
Если вы запустите locate *.cpp
в оболочке, оболочка сначала попытается расширить *.cpp
до всех имен файлов, соответствующих этому шаблону, а затем вызовет locate
с этими именами файлов в качестве аргумента.
Так что, если в вашем текущем каталоге есть файлы .cpp, то locate
никогда не увидит *.cpp
, а только имена файлов, в которые он развернется.
Используйте
locate '*.cpp'
, если вы не хотите, чтобы оболочка пыталась расширить шаблон.
locate
- это метод поиска на основе базы данных. Это чертовски быстро, но не совсем. Я бы предложил использовать find
, который сравнительно намного медленнее, но может сделать то, что вам нужно:
find /home/forfun/netstream/ -name '*.cpp'
В качестве альтернативы, если вы довольны выводом locate, но просто хотите его обрезать вниз, вы всегда можете передать это через grep
:
locate '*.cpp' | grep 'forfun/netstream'