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