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

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

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

Locate всегда выплевывает слишком много информации, потому что каждый файл в каталоге также подходит для 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
}
20
задан 28 November 2010 в 01:49

4 ответа

Вы пробовали:

locate /home/insertusernamehere/*/filename?

или

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

или какой-либо другой вариант?

0
ответ дан 28 November 2010 в 01:49

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

locate -r '/log
0
ответ дан 28 November 2010 в 01:49

Вот оно

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

locatedir $*
0
ответ дан 28 November 2010 в 01:49

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

locate foldername | grep /foldername$
0
ответ дан 28 November 2010 в 01:49

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

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