Я использую 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
}
Вы пробовали:
locate /home/insertusernamehere/*/filename
?
или
locate file | grep -i '^/home/.*/examplesubdirectory'
?
или какой-либо другой вариант?
Вы можете использовать опцию --regex
(-r
) из locate
:
locate -r '/log
Вот оно
locatedir () {
locate "$*" | while read line
do
if [ -d "$line" ] ; then echo $line ; fi
done
}
locatedir $*
Один из способов (я подозреваю, что может быть и лучше) - использовать grep для возврата только тех путей, которые заканчиваются на имени вашей папки:
locate foldername | grep /foldername$