題 什麼相當於Linux的Mac版updateb命令?


如果我想使用 locate 在Linux機器上的命令,我通常運行 sudo updatedb 首先更新數據庫。我可以跑了 locate OS X 10.5上的命令,但我找不到 updatedb。什麼是mac的相應updatedb?


219
2018-02-16 15:23


起源


好的upatedb和locate是很好的東西,但他們需要定期運行updatedb(更新b定期運行,這會在不方便的時候減慢你的系統速度,或者找到顯示對不再存在的文件的引用)。所以我認為不是設置locate / updatedb而是熟悉(更強大的)查找。 - amo-ej1
雖然find對很多東西很有用,但它確實需要每次都通過文件系統。如果你可以縮小你正在尋找的地方,那很好。 locate的優點是保留了自己的數據庫,因此不需要每次都進行搜索。這對於大型和/或遠程文件系統尤為重要。我認為每個都有自己的位置。 - KeithB
第一次跑步時 locate 在OS X盒子上,它告訴你運行 sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist。 - Török Gábor
取決於您需要使用的內容 locate 因為,您可能會發現使用Spotlight的命令行界面更方便, mdfind,因為Spotlight數據庫幾乎總是最新的,並提供比定位更多的功能。 man mdfind - Paul R


答案:


它的 locate.updatedb 在Mac上。

sudo /usr/libexec/locate.updatedb

有關更多信息,請參閱 locate.updatedb手冊頁


308
2018-02-16 15:27



那 man 頁面還聲稱: 它通常由/System/Library/LaunchDaemons/com.apple.locate.plist作業每週運行一次。 (和 man locate 告訴一個關於該腳本: /usr/libexec/locate.updatedb用於更新locate數據庫的腳本) - Arjan
@Arjan:它應該每週運行一次,但默認它被禁用,應該完成的時間是星期日凌晨3點(或類似的東西),這不是真的有用:) - Studer
在linux上我經常運行 sudo ionice -c3 updatedb 這說明 updatedb 很好地分享i / o控制器(很好),但我不認為這個命令在Mac上可用。我也想念 -r 正則表達式標誌,可以與GNU locate一起使用,雖然我不確定我是否想使用自製程序並安裝@Grogs提到的GNU定位 - cwd
示例macosx替代“locate(-r)”和“updatedb”使用聚光燈(當然“-i”可選):mdfind -name“mp4”| egrep -i“^ / Users。* Downloads /.* Stuff” - michael
另外,如果你 別 找到你期望的文件,請注意來自BUGS部分的相關警告 手冊頁: 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


你可以做 sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb 製作 updatedb 命令可用。


81
2017-10-18 22:29



嘿,我剛發布這篇評論..然後看到你這樣說了。我認為這是一個不錯的小模型。 :) - James T Snell
或者在.bash_profile中將其別名 - Jim Johnson


就個人而言,我剛安裝了findutils(使用MacPorts或Homebrew)。

然後你有GNU locate和updatedb。

如果沒有sudo,updatedb將無法運行。

就個人而言,我更喜歡每個用戶都有位置;如果您sudo其他用戶將知道您的所有文件的名稱/位置。

我有一個cron工作要運行:

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

在我的.zshrc .bashrc / .bashprofile中:

export LOCATE_PATH="~/tmp/locatedb"


19
2017-12-04 02:27



OS X Mavericks上的Brew安裝findutils給了我一個 gupdatedb 命令,而不是 updatedb 一。不幸的是這個命令給了我 這裡描述的錯誤 (引用您的SO答案)。最終我有別名 updatedb 至 LC_ALL=’C’ sudo updatedb 作為一種解決方法,但我不知道這是否是一個長期的解決方案。 - David Rivers
加 /opt/local/libexec/gnubin 在你的道路的開始,如果你想要的話 coreutils 和 findutils 安裝 macports 提供他們原來的名字(而不是他們的 g - 前綴版本)。 - Ioannis Filippidis


如果在沒有首先更新數據庫的情況下運行locate,則有可能通過其輸出查看操作系統的推薦方式。

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

2
2017-08-15 09:09