Зависит ли выходной каталог от каталога?

Когда я нахожусь в моем домашнем каталоге и введите 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'
Другие вопросы по тегам