找到并更新b-找不到文件


8

我跑了

sudo /usr/libexec/locate.updatedb

然后

locate Radium3

但是什么也没返回!

$ ls ~/Library/Containers/com.catpigstudios.Radium3/
Container.plist Data

那么为什么locate看不到所有文件呢?

我在OS X上正确使用此命令吗?

Answers:


5

尝试:

sudo /usr/libexec/locate.updatedb

并查看配置:

/etc/locate.rc配置文件

编辑:

发表在这里输出:

echo $LOCATE_CONFIG

和:

cat /etc/locate.rc

和:

echo $0

更新:

https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man1/locate.1.html#//apple_ref/doc/man/1/locate

查找程序在数据库中搜索与指定模式匹配的所有路径名。数据库数据库是定期(通常每周或每天)重新计算的,并且包含所有可公共访问的文件的路径名

尝试mdfind代替定位

更新2:

mdfind -name文本更准确。只是mdfind文本为您提供了也包含文本的文件。–大卫·克伦波蒂奇

mdfind -name text

#SEARCHPATHS="/"在配置中没有评论,它没有帮助。-v选项似乎未产生任何其他输出:/
davidhq 2014年

请给我其他信息。在回答“已编辑”部分。
user3439968


1
$ ls -la /var/db/locate.database -r--r--r-- 1没有人轮19463861 Apr 6 20:08 /var/db/locate.database $ locate david.jpg / Users / david / temp /david.jpg
davidhq 2014年

1
您应该将答案更新mdfind -name text为更准确的答案。只mdfind text给您包含文本的文件。
davidhq 2014年

3

权限可能是罪魁祸首,因为定位显然无法读取世界不可读的文件。见这个答案Plundra更多的解释。

的findutils从包自制并启用gupdatedb,并glocate似乎克服一些内置的实用工具的限制命令。


谢谢!但是现在我知道mdutil检查一下有意义吗?我可以想到的一个用例是,我可以使用gupdatedb- 手动触发重新扫描-使用Spotlight不太容易,否则会花费更长的时间(它还会索引文件内容)。还有其他优势吗?
davidhq 2014年

1
当然,使用mdutil / spotlight重新编制索引可能需要一段时间。updatedb更快。glocate索引系统文件似乎没有问题,而我发现mdfind忽略〜/ Library和其他系统文件。我肯定觉得我得到更多的点击有glocate超过mdfind在大多数情况下。YMMV。
VogonPoetLaureate 2014年

好的,我现在正在测试。我想我发现了一些问题...我跑了拳头sudo gupdatedb,然后保存了glocate Radium输出。然后我跑了gupdatedb,它说:/.Trashes: Permission denied,其他一些文件夹也一样。我比较了两者的输出,结果是一样的!奇怪...
davidhq 2014年

用您的话说,您首先运行sudo gupdatedb(以root用户身份运行),然后又以gupdatedb普通用户身份运行,该用户将无法访问root用户有权访问的文件,这意味着您将获得权限被拒绝的错误。如果您想要整个系统的完整文件名数据库,请继续以root用户身份运行它。这会将您的文件暴露给系统上可能使用该glocate命令的其他用户。但是,如果您是唯一的用户,那应该没问题。
VogonPoetLaureate,2014年

2

如果要搜索Spotlight使用的同一数据库,则可以使用以下mdfind命令代替(尽管不是完全替代)locate

mdfind Radius3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.