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?
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?
Câu trả lời:
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ự.
$ locate '/usr/lib64/*tmpfile'sẽ không trả lại kết quả.
locatethông qua grep.
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>
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 .
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ốimy_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