Находится ли выходной каталог зависимым?

Когда я нахожусь в моем домашнем каталоге и набираю locate *.cpp, я получаю сотни результатов.

Используя ту же команду в (например) ~/../forfun/netstream/, я вижу только несколько результатов.

Как это возможно?

3
задан 6 August 2014 в 21:03

2 ответа

Если вы запустите locate *.cpp в оболочке, оболочка сначала попытается расширить *.cpp до всех имен файлов, соответствующих этому шаблону, а затем вызовет locate с этими именами файлов в качестве аргумента.

Так что, если в вашем текущем каталоге есть файлы .cpp, то locate никогда не увидит *.cpp, а только имена файлов, в которые он развернется.

Используйте

locate '*.cpp'

, если вы не хотите, чтобы оболочка пыталась расширить шаблон.

0
ответ дан 6 August 2014 в 21:03

locate - это метод поиска на основе базы данных. Это чертовски быстро, но не совсем. Я бы предложил использовать find, который сравнительно намного медленнее, но может сделать то, что вам нужно:

find /home/forfun/netstream/ -name '*.cpp'

В качестве альтернативы, если вы довольны выводом locate, но просто хотите его обрезать вниз, вы всегда можете передать это через grep:

locate '*.cpp' | grep 'forfun/netstream'
0
ответ дан 6 August 2014 в 21:03

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

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