locate
命令,通常通常先运行sudo updatedb
来更新数据库。我可以在OS X 10.5上运行locate
命令,但找不到updatedb
。 Mac对应的updateb是什么?#1 楼
在Mac上是locate.updatedb
。sudo /usr/libexec/locate.updatedb
有关更多信息,请参见locate.updatedb手册页。
评论
该手册页还声称:它通常由/System/Library/LaunchDaemons/com.apple.locate.plist作业每周运行一次。 (然后人locate告诉一个有关该脚本的脚本:/usr/libexec/locate.updatedb用于更新locate数据库的脚本)
– Arjan
2010-2-16在15:29
@Arjan:它应该每周运行一次,但是默认情况下它是禁用的,应该完成的时间是星期日的凌晨3点(或类似的时间),这并不是真正有用的:)
–学生
2010-2-16在15:36
在linux上,我通常运行sudo ionice -c3 Updatedb,它告诉updatedb很好地共享I / O控制器(io不错),但是我认为该命令在Mac上不可用。我也想念-r正则表达式标志可以与GNU定位一起使用,尽管我不确定我是否要使用自制程序并安装@Grogs提到的GNU定位。
– cwd
2012年6月16日12:41
使用聚光灯的“ locate(-r)”和“ updatedb”的示例macosx替代品(当然是“ -i”可选):mdfind -name“ mp4” | egrep -i“ ^ / Users。*下载/.*Stuff”
–迈克尔
13年1月30日在19:35
另外,如果找不到所需的文件,请在联机帮助页的“ BUGS”部分中注意以下相关警告:locate数据库通常由用户“ nobody”构建,而locate.updatedb(8)实用程序将跳过用户“ nobody”,“ nobody”组或“ world”无法读取的目录。例如,如果您的HOME目录不是世界可读的,则数据库中都没有文件
–阿舒托什·金达尔(Ashutosh Jindal)
2015年12月9日13:18
#2 楼
您可以执行sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb
使updatedb
命令可用。评论
呵呵,我只是发表此评论。然后看到你这样说。我认为这是一个不错的小工具。 :)
–詹姆斯·斯内尔(James T Snell)
15年7月2日在16:51
或在您的.bash_profile中为其添加别名
–吉姆·约翰逊(Jim Johnson)
16年8月9日在17:26
#3 楼
就我个人而言,我只是安装了findutils(使用MacPorts或Homebrew)。然后您便拥有了GNU的位置并进行了更新b。
没有sudo,updatedb将无法工作。
我个人更希望每个用户都位于b;如果您使用sudo,其他用户将知道所有文件的名称/位置。
我有一个cron作业可以运行:
updatedb --localpaths='/Users/grogs' --output='/Users/grogs/tmp/locatedb'
在我的.zshrc .bashrc / .bashprofile中:
export LOCATE_PATH="~/tmp/locatedb"
评论
在OS X Mavericks上执行现成的安装findutils是给我一个gupdatedb命令,而不是一个updatedb。不幸的是,此命令给了我一个错误,描述在这里(引用了您的SO答案)。最终,我将updateb别名为LC_ALL ='C'sudoupdatedb作为一种解决方法,但是我不知道这是否是一个长期解决方案。
– David Rivers
2013年12月13日19:18
如果希望Macports安装的coreutils和findutils可以使用其原始名称(而不是其g前缀的版本),请在路径的开头添加/ opt / local / libexec / gnubin。
–艾奥尼斯·菲利皮德
2014-09-18 22:01
#4 楼
如果在不首先更新数据库的情况下运行定位,则有机会通过其输出查看操作系统的推荐方式。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
#5 楼
实际上,您也可以在Mac中使用GNU定位和更新。brew install findutils --with-default-names
export PATH="$(brew --prefix findutils)/libexec/gnubin:$PATH"
export MANPATH="$(brew --prefix findutils)/libexec/gnuman:$MANPATH"
which locate
评论
upatedb和locate很好,但是它们需要定期运行updatedb(updatedb定期运行,这会在不方便的时候减慢您的系统速度,或者locate显示对不再存在的文件的引用)。因此,我认为与其设置locate / updatedb,不如熟悉(功能更强大)find可能会更好。尽管find对于很多事情很有用,但每次都需要遍历文件系统。如果您可以缩小查找范围,那很好。定位的优点是保留自己的数据库,因此不需要每次都搜索。这对于大型和/或远程文件系统尤为重要。我认为每个人都有自己的位置。
在OS X盒子上首次运行时,它会告诉您运行sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist。
根据您需要使用locate的用途,您可能会发现使用命令行界面与Spotlight mdfind比较方便,因为Spotlight数据库几乎始终是最新的,并且比locate提供了更多的功能。 man mdfind