Tương đương với lệnh updateb của Linux cho Mac là gì?


234

Nếu tôi muốn sử dụng locatelệnh trên máy Linux, tôi thường chạy sudo updatedbtrước để cập nhật cơ sở dữ liệu. Tôi có thể chạy locatelệnh trên OS X 10.5 nhưng tôi không thể tìm thấy updatedb. Cập nhật tương ứng cho mac là gì?


Upedb và định vị tốt là những thứ tốt đẹp nhưng chúng yêu cầu chạy updateb thường xuyên (hoặc updateb chạy thường xuyên và điều này làm chậm hệ thống của bạn vào những thời điểm bất tiện hoặc định vị hiển thị các tham chiếu đến các tệp không còn ở đó nữa). Vì vậy, tôi nghĩ rằng thay vì thiết lập định vị / cập nhật, có lẽ tốt hơn là làm quen với (tìm kiếm mạnh mẽ hơn nhiều).
amo-ej1

9
Mặc dù find rất hữu ích cho nhiều thứ, nhưng nó cần phải đi qua hệ thống tập tin mỗi lần. Nếu bạn có thể thu hẹp những nơi bạn đang tìm kiếm, điều đó tốt. Ưu điểm của việc định vị là giữ cơ sở dữ liệu của riêng mình và do đó không cần phải tìm kiếm mỗi lần. Điều này đặc biệt quan trọng với các hệ thống tập tin lớn và / hoặc từ xa. Tôi nghĩ rằng mỗi cái đều có vị trí của nó.
KeithB

1
Khi lần đầu tiên chạy locatetrên hộp OS X, nó sẽ cho bạn chạy sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor 17/210

12
Tùy thuộc vào những gì bạn cần sử dụng locate, bạn có thể thấy thuận tiện hơn khi sử dụng giao diện dòng lệnh cho Spotlight mdfind, vì cơ sở dữ liệu Spotlight gần như luôn cập nhật và cung cấp nhiều chức năng hơn so với định vị. man mdfind
Paul R

Câu trả lời:


327

Đó là locate.updatedbtrên Mac.

sudo /usr/libexec/locate.updatedb

Để biết thêm thông tin, hãy xem trang man location.updatedb .


9
manTrang đó cũng tuyên bố: Nó thường được chạy mỗi tuần một lần bởi công việc /System/L Library / LaunchDaemons / com.apple.locate.plist. (Và man locatenói với một người về tập lệnh đó: /usr/libexec/locate.updatedb Script để cập nhật cơ sở dữ liệu định vị )
Arjan

5
@ Arjan: Nên chạy mỗi tuần một lần, nhưng mặc định nó tàn tật và thời gian khi nó nên được thực hiện là 3:00 vào ngày chủ nhật (hoặc một cái gì đó tương tự), mà không phải là thực sự hữu ích :)
Studer

Trên linux Tôi thường chạy sudo ionice -c3 updatedbmà nói updatedbđể chia sẻ bộ điều khiển I / O độc đáo (io đẹp) nhưng tôi không nghĩ rằng lệnh này có sẵn trên mac. Tôi cũng nhớ có -rlá cờ biểu thức chính quy mà có thể được sử dụng với GNU xác định vị trí, mặc dù tôi không chắc là tôi muốn sử dụng homebrew và cài đặt GNU Xác định vị trí được đề cập bởi @Grogs
PT

3
Ví dụ macosx thay thế cho "định vị (-r)" và "updateb" sử dụng đèn chiếu ("-i" tùy chọn tất nhiên): mdfind -name "mp4" | egrep -i "^ / Người dùng. * Tải xuống /.* Stuff"
michael

Ngoài ra, nếu bạn không tìm thấy các tệp mà bạn mong muốn, hãy lưu ý cảnh báo có liên quan này từ phần BUGS của trang web : The locate database is typically built by user ''nobody'' and the locate.updatedb(8) utility skips directories which are not readable for user ''nobody'', group ''nobody'', or world. For example, if your HOME directory is not world-readable, none of your files are in the database
Ashutosh Jindal

85

Bạn có thể làm sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbđể làm cho updatedblệnh có sẵn.


Heh, tôi chỉ đăng bài này như một bình luận .. Sau đó thấy bạn nói điều này. Tôi nghĩ rằng đây là một mod nhỏ đẹp để làm. :)
James T Snell

3
hoặc bí danh trong .bash_profile của bạn
Jim Johnson

19

Cá nhân, tôi chỉ cài đặt findutils (sử dụng MacPorts hoặc Homebrew).

Sau đó, bạn có GNU xác định vị trí và cập nhật.

updateb sẽ không hoạt động mà không có sudo.

Cá nhân tôi thích có một người dùng định vị mặc dù; nếu bạn sudo người dùng khác sẽ biết tên / vị trí của tất cả các tệp của bạn.

Tôi có một công việc định kỳ để chạy:

updatedb --localpaths='/Users/grogs' --output='/Users/grogs/tmp/locatedb'

Và trong .zshrc .bashrc / .bashprofile của tôi:

export LOCATE_PATH="~/tmp/locatedb"


3
Công cụ tìm kiếm cài đặt bia trên OS X Mavericks đã cho tôi một gupdatedblệnh chứ không phải lệnh updatedb. Thật không may, lệnh này đã cho tôi một lỗi được mô tả ở đây (trong đó câu trả lời SO của bạn được tham chiếu). Cuối cùng tôi đã aliased updatedbđể LC_ALL=’C’ sudo updatedbnhư một cách giải quyết, nhưng tôi không biết nếu điều này là một giải pháp lâu dài.
David Rivers

2
Thêm /opt/local/libexec/gnubinvào đầu đường dẫn của bạn, nếu bạn muốn coreutilsfindutilsđược cài đặt macportssẵn với tên gốc của chúng (và không phải là gphiên bản được cải tiến của chúng ).
Ioannis Filippidis

2

Nếu bạn chạy định vị mà không cập nhật cơ sở dữ liệu trước tiên, bạn có cơ hội thấy cách được đề xuất của HĐH theo đầu ra của nó.

WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
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.