Як використовувати команду 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.
Ladadadada

5

Створіть базу даних слота для конкретного каталогу за допомогою:

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 (оновленийb), якщо ви хочете шукати інший каталог.
gharper

О, на моєму Gentoo це працює чудово, але CentOS не включає цю опцію.
кванта

Проголосування проти? Чи можете ви залиште коментар?
кванта

Якщо у вас є помилки типу:, updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permittedперевірте, як використовувати команду updatedb як звичайний користувач в Linux .
kenorb

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.