如果要在Linux计算机上使用locate命令,通常通常先运行sudo updatedb来更新数据库。我可以在OS X 10.5上运行locate命令,但找不到updatedb。 Mac对应的updateb是什么?

评论

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

#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上,我通常运行s​​udo 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