Как использовать команду locate в указанном каталоге?


16

Я использую locateкоманду в Linux. Мое текущее использование этого ищет всю файловую систему. Я только хочу, чтобы искать в определенном каталоге. Как я могу это сделать?


TLDR: Вот псевдоним терминала для locateпоиска в указанном каталоге: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " Как только псевдоним вступит в силу, на типе терминала, my_locate *foo*и вы готовы к гонкам. Вы можете объединить обновления базы данных и найти результаты поиска, используя символ двоеточия для объединения баз данных. rtfm: linux.die.net/man/8/updatedb
Эрик Лещинский,

Ответы:


11

Другой подход заключается в использовании сопоставления с образцом в locate:

locate '/some/directory/*filename*'

Сравните вывод команд ниже:

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* дает тот же результат.


3
+1 Это правильный ответ. Обратите внимание, что если вы включите подстановочный знак, границы станут фиксированными. То есть в приведенном выше примере, не $ locate '/usr/lib64/*tmpfile'даст никаких результатов.
xofer

Если вы хотите большего контроля, чем могут предложить простые подстановочные знаки, вы всегда можете передать результаты locateсквозного просмотра grep.
Ладададада

5

Создайте базу данных slocate для вашего конкретного каталога с:

updatedb -U /path/to/directory

и искать с помощью:

locate <search_string>

ОБНОВИТЬ

Это хорошо работает в моей системе Gentoo, но CentOS не включает -Uопцию. Итак, вы можете попробовать ниже:

Создайте базу данных с помощью:

# updatedb -U /path/to/dir -o dir_locate.db

и поиск:

# locate -d dir_locate.db <search_string>

3
"locate -U" выдает ошибку неверного параметра ... Догадываясь, что вы имели в виду "updatedb -U"? Также хорошо отметить, что для этого требуется перестроить mlocate.db (updatedb), если вы когда-нибудь захотите найти другой каталог.
Арфист

О, на моем Gentoo он работает нормально, но CentOS не включает эту опцию.
квантами

Голосовать вниз? Не могли бы вы оставить комментарий?
квантами

Если у вас есть ошибка вроде:, updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permittedпроверьте, как использовать команду updatedb в качестве обычного пользователя в Linux .
Кенорб

2

Самый простой ответ, который я могу придумать,

locate search_term | grep "/specified/directory"

Лучшее решение может быть использовать "найти" и его пути пути ...


0

Самый простой способ, как в следующем примере:

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

Перейдите $PWDв ваш конкретный каталог.

Приведенный выше пример создаст вашу локальную базу данных только для определенного каталога.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.