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

20

Я использую найти все время, чтобы найти файлы, которые я знаю, имя 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
}
    
задан Michael 27.11.2010 в 22:49
источник

4 ответа

12

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

locate foldername | grep /foldername$
    
ответ дан misterben 27.11.2010 в 23:08
источник
28

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

locate -r '/log$'
    
ответ дан Florian Diesch 28.11.2010 в 00:31
5

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

locate /home/insertusernamehere/*/filename ?

или

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

или любое изменение такого?

    
ответ дан RolandiXor 27.11.2010 в 23:02
2

Здесь

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

locatedir $*
    
ответ дан Linuxuser 12.06.2015 в 13:27