Làm cách nào để sử dụng lệnh định vị trong một thư mục được chỉ định?


16

Tôi đang sử dụng locatelệnh trên Linux. Việc sử dụng hiện tại của tôi của nó tìm kiếm thông qua toàn bộ hệ thống tập tin. Tôi chỉ muốn nó tìm kiếm trong một thư mục cụ thể. Tôi có thể làm cái này như thế nào?


TLDR: Đây là bí danh thiết bị đầu cuối để thực hiện locatetìm kiếm trong một thư mục được chỉ định: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " Một khi bí danh có hiệu lực, trên loại thiết bị đầu cuối my_locate *foo*và bạn sẽ rời khỏi cuộc đua. Bạn có thể nối các cập nhật cơ sở dữ liệu và định vị tìm kiếm bằng cách sử dụng ký tự dấu hai chấm để nối cơ sở dữ liệu. rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

Câu trả lời:


11

Một cách tiếp cận khác là sử dụng mô hình khớp trong locate:

locate '/some/directory/*filename*'

So sánh đầu ra của các lệnh dưới đây:

$ 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* cho kết quả tương tự.


3
+1 Đây là câu trả lời đúng. Lưu ý rằng nếu bạn bao gồm ký tự đại diện, các ranh giới sẽ được cố định. Đó là trong ví dụ trên, $ locate '/usr/lib64/*tmpfile'sẽ không trả lại kết quả.
xofer

Nếu bạn muốn kiểm soát nhiều hơn các ký tự đơn giản có thể cung cấp, bạn luôn có thể dẫn kết quả locatethông qua grep.
Ladadadada

5

Tạo cơ sở dữ liệu slocate cho thư mục cụ thể của bạn với:

updatedb -U /path/to/directory

và tìm kiếm với:

locate <search_string>

CẬP NHẬT

Điều này hoạt động tốt trên hệ thống Gentoo của tôi nhưng CentOS không bao gồm -Utùy chọn. Vì vậy, bạn có thể thử bên dưới thay thế:

Xây dựng cơ sở dữ liệu với:

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

và tìm kiếm:

# locate -d dir_locate.db <search_string>

3
"xác định vị trí -U" đưa ra một lỗi tùy chọn không hợp lệ ... Đoán bạn có nghĩa là "updateb -U"? Cũng tốt để lưu ý điều này đòi hỏi phải xây dựng lại mlocate.db (updateb) nếu bạn muốn tìm kiếm một thư mục khác.
gharper

Ồ, trên Gentoo của tôi, nó hoạt động tốt nhưng CentOS không bao gồm tùy chọn này.
lượng tử

Bỏ phiếu? Bạn có thể vui lòng để lại một bình luận?
lượng tử

Nếu bạn gặp lỗi như :,updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted hãy kiểm tra cách sử dụng lệnh updateb như một người dùng thông thường trên linux .
kenorb

2

Câu trả lời đơn giản nhất tôi có thể nghĩ đến là

locate search_term | grep "/specified/directory"

Giải pháp tốt hơn có thể là sử dụng "find" và các tùy chọn đường dẫn của nó ...


0

Cách dễ nhất là như trong ví dụ sau:

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

Thay đổi $PWDvào thư mục cụ thể của bạn.

Ví dụ trên sẽ tạo cơ sở dữ liệu cục bộ của bạn chỉ cho thư mục cụ thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.