найти остановку повторения, когда каталог содержит имя

Иногда при использовании locate моя строка поиска (случайно или намеренно) будет соответствовать части каталога. Это приводит к печати всего, что ниже этой точки в каталоге. Например:

$ locate lib /home/myname/libImWorkingOn/libImWorkingOn.so /lib/ /lib/modules/ /lib/firmware/ .... etc 

Это быстро выходит из-под контроля и затрудняет поиск.

Есть ли способ предотвратить это? Например, напишите:

 $locate lib /home/myname/libImWorkingOn/libImWorkingOn.so /lib/ 

И больше ничего?

Кроме того, возможно ли найти каталог и найти его только для каталогов?

Например (в поисках базовой папки qemu)

Актуально:

 $locate qemu home/myname/qemu home/myname/qemu/.svn home/myname/qemu/.svn/..... home/myname/qemu/Makefile ..... usr/bin/qemu ..... 

Желаемая:

 $locate (option) qemu /home/myname/qemu /usr/bin/qemu 

    В системах с версией locate mlocate вы можете ограничить совпадения с помощью параметра -b или --basename :

     locate -b lib 

    … который ограничил бы результаты файлами, имена которых содержат строку. В моей системе это приводит к гораздо меньшему количеству совпадений:

     $ locate lib | wc -l 28901 $ locate -b lib | wc -l 3430 

    locate печатает список абсолютных путей. Вы всегда можете передать результат через grep чтобы получить только имена файлов

     locate lib |grep -E '/lib$' 

    или просто имена каталогов

     locate lib |grep '/lib/' | sed -e 's,/lib/.*$,/lib,' | sort -u 

    Если вы делали это достаточно часто, вы могли бы написать небольшой скрипт, который выполнял бы каждый из них (конечно же, с параметризацией «lib»).

    мы можем ограничить количество записей, используя опцию -l как -l ниже.

      locate -w lib -l 1 
    • -w соответствует точное слово

    • -l Выйти успешно после нахождения числа, которое указало

    Или вы можете использовать опцию -b

     locate -b '\lib' -l 1 
    • -b Сопоставить только базовое имя с указанными шаблонами