MacOSX 和 Locate 在 iCloud Drive 上查找文件

MacOSX 和 Locate 在 iCloud Drive 上查找文件

我是一名 Linux 管理员,我习惯使用locate命令。我不记得这个命令是OSX自带的还是我使用brew安装的。

您可能知道,locate 与 find 不同,它创建一个数据库,允许从终端进行快速搜索。常规的 Linux updatedb 命令(用于刷新数据库)对我来说不起作用,我必须使用:sudo /usr/libexec/locate.updatedb。此外,配置文件位于:/etc/locate.rc

我希望能够找到 iCloud Drive 上的文件。问题是,尽管已将其设置为索引整个“/”系统,但定位不会索引位于以下位置的 iCloud Drive ~/Library/Mobile Documents/com~apple~CloudDocs:。

我甚至出于测试目的将其添加到配置文件中并运行列出的更新命令。但是,locate 从未在 iCloud Drive 上找到文件。

我注意到locate命令手册页上写道:

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.

因此,也许我需要使用一些技巧,将用户 nobody 添加到我的用户组,但我以前从未听说过 nobody 用户。此外,如果我想将我的普通用户组附加到 nobody 用户,也没有 usermod 命令。

你们这些聪明人有没有什么建议可以解决这个奇怪的要求?

答案1

我会跳过尝试locate索引文件的步骤,而是使用 macOS 的类似但功能更强大的系统 Spotlight。与 不同locate,它会索引所有内容(但会将输出限制为执行查找的用户可读的文件)。它还会不断更新,并且索引的文件属性远不止文件名。它可在命令行中使用命令mdfind默认情况下,它会搜索所有文件的索引属性以查找您提供的任何文本;如果您只想按名称搜索,请使用以下-name选项:

$ mdfind -name icloud-file
/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File-2.txt
/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File.rtf

locate请注意,它不使用与;相同的查询语法,-name只是进行不区分大小写的名称包含查找。您可以使用Spotlight 的元数据查询表达式语法

$ mdfind "kMDItemFSName == iCloud-File"    # this does an exact-match search, so no matches
$ mdfind "kMDItemFSName == *iCloud-File*"    # Wildcards to the rescue!
/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File-2.txt
/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File.rtf
$ mdfind "kMDItemFSName == *iCloud-File* && kMDItemContentType == public.plain-text"
/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File-2.txt

为了更好地了解它可以搜索哪些属性,请使用mdls

$ mdls "/Users/gordon/Library/Mobile Documents/com~apple~CloudDocs/Example-iCloud-File-2.txt"
_kMDItemOwnerUserID            = 501
kMDItemContentCreationDate     = 2017-09-01 19:06:49 +0000
kMDItemContentModificationDate = 2017-09-01 19:07:06 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.item",
    "public.text",
    "public.data",
    "public.content",
    "public.plain-text"
)
kMDItemDateAdded               = 2017-09-01 19:07:06 +0000
kMDItemDisplayName             = "Example-iCloud-File-2.txt"
kMDItemFSContentChangeDate     = 2017-09-01 19:07:06 +0000
kMDItemFSCreationDate          = 2017-09-01 19:06:49 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = (null)
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = (null)
kMDItemFSLabel                 = 0
kMDItemFSName                  = "Example-iCloud-File-2.txt"
kMDItemFSNodeCount             = (null)
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 22
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text Document"
kMDItemLogicalSize             = 22
kMDItemPhysicalSize            = 4096
kMDItemUserCreatedDate         = (
    "2017-09-01 19:06:49 +0000"
)
kMDItemUserCreatedUserHandle   = (
    501
)
kMDItemUserModifiedDate        = (
    "2017-09-01 19:06:52 +0000",
    "2017-09-01 19:07:06 +0000"
)
kMDItemUserModifiedUserHandle  = (
    501,
    501
)

(尽管这实际上是不完整的——例如,它不包含完全索引和可搜索的文本文件的内容。)

相关内容