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