Использование locate для поиска каталога

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

Когда я забыл о расположении каталога, ни поиск, ни поиск не кажутся идеальными.

Locate всегда выплескивает слишком много информации, потому что каждый файл в каталоге также подходит для поиска. Например, если бы я искал каталог с именем log где-то в моей файловой системе, то locate log вернул бы тонны и тонны результатов. Если я делаю то же самое с find, find / -name log -type d find занимает минуты для запуска и выплескивает всевозможные ошибки разрешений каждый раз, когда он сталкивается с папкой, которую он не может прочитать.

Есть ли способ лучше?

Ответ: Поэтому я придерживаюсь grep, пока не найду что-то еще:

locatedir () { for last; do true; done if [[ $last == *\/* ]] then locate $@ | grep "${last}\$" else locate $@ | grep "/${last}\$" fi } 

Способ (я подозреваю, что может быть лучший способ) – использовать grep для возврата только тех путей, которые заканчиваются в имени вашей папки:

 locate foldername | grep /foldername$ 

Вы можете использовать опцию --regex ( -r ) для locate :

 locate -r '/log$' 

Ты пробовал:

locate /home/insertusernamehere/*/filename ?

или

locate file | grep -i '^/home/.*/examplesubdirectory' locate file | grep -i '^/home/.*/examplesubdirectory' ?

или любой такой вариант?

Вот

 locatedir () { locate "$*" | while read line do if [ -d "$line" ] ; then echo $line ; fi done } locatedir $*