MDUtil

Mac 上的 mdutil 命令

mdutil 是 macOS 自带的终端命令,用来管理聚焦(Spotlight)的搜索索引:查看磁盘有没有建立索引,关闭或开启索引,或者清除索引,让聚焦重新建立。

在 macOS Sequoia 15.7 上实际运行过

常用命令

  • 查看启动磁盘有没有建立索引mdutil -s /
  • 查看所有宗卷的状态mdutil -sa
  • 清除并重建启动磁盘的索引sudo mdutil -E /
  • 关闭某个磁盘的索引sudo mdutil -i off "/Volumes/My Drive"
  • 重新开启索引sudo mdutil -i on "/Volumes/My Drive"

查看磁盘有没有建立索引

-s 显示指定宗卷的索引状态。/ 是启动磁盘,其他磁盘挂载在 /Volumes 下面。查看状态不需要 sudo。

mdutil -s /
/:
	Indexing enabled.

加上 -a 会列出聚焦知道的所有宗卷。从 macOS Catalina 开始,列表里还有存放你的文件的 /System/Volumes/Data,以及 /System/Volumes/Preboot。

mdutil -sa

路径必须是宗卷的挂载位置。如果指定的是普通文件夹,例如你的个人文件夹,会得到 Error: unknown indexing state.

重建聚焦索引

如果聚焦或访达的搜索找不到磁盘上明明存在的文件,或者一直显示早已删除的文件,索引可能已经损坏。-E 会清除宗卷的索引,聚焦随即开始建立新的索引:

sudo mdutil -E /

sudo 会要求输入 Mac 的登录密码,输入时屏幕上不显示任何字符。外接磁盘要使用 /Volumes 下面的路径,名称里有空格时加上引号:

sudo mdutil -E "/Volumes/My Drive"

不需要先关闭索引。根据 Apple 的说明,建立索引可能需要数小时甚至数天,具体取决于磁盘上的数据量;Mac 闲置并接通电源时完成得更快。建立索引期间,在“活动监视器”里可以看到 mds、mds_stores 和 mdworker 正在占用处理器。

只在索引确实出错时重建。macOS 更新以后或者大量文件发生变化时,聚焦本来就会持续建立索引一段时间,这时清除索引只会让它从头开始。

关闭或开启索引

-i off 让聚焦停止为宗卷建立索引,适合只存放备份或临时文件的磁盘。关闭以后,搜索无法再查找这个宗卷里文件的内容。

sudo mdutil -i off "/Volumes/My Drive"

-i on 重新开启索引,聚焦会把这个宗卷的索引更新到最新:

sudo mdutil -i on "/Volumes/My Drive"

-d 还会关闭这个宗卷的搜索,状态随后显示为 Indexing and searching disabled.,同样可以用 -i on 恢复。

一般不建议关闭启动磁盘的索引,因为聚焦要靠这个索引查找 App、文稿、邮件和系统设置。如果只是想让某些文件夹不出现在搜索结果里,把它们加入聚焦设置里的隐私列表就可以。

全部选项

选项作用
-s显示指定宗卷的索引状态。
-a对所有宗卷执行命令,例如 mdutil -sa。
-i on、-i off开启或关闭索引。磁盘空间快用完时,索引可能会推迟。
-E清除索引,让聚焦重新建立。
-d关闭宗卷的索引和搜索。
-v有更多信息时显示得更详细,例如 mdutil -sv /。
-V 宗卷对这个宗卷上的所有索引执行命令。
-t根据文件 ID 找到文件,可以附带宗卷路径或设备 ID。
-r 插件让聚焦重新导入所列导入插件负责的文件。
-L 宗卷列出宗卷索引文件夹里的文件,需要 sudo。
-P 宗卷显示宗卷的聚焦设置文件 VolumeConfiguration.plist,需要 sudo。
-X 宗卷删除宗卷的索引文件夹,但不关闭索引。重新启动、重新挂载宗卷,或者执行 -i、-E 之后,聚焦会重新建立。需要 sudo。
-p原本用来把本机缓存的索引写回网络磁盘。在 macOS Sequoia 上会显示 Error: datastore publishing not implemented.

提示信息的含义

  • Indexing enabled.
    聚焦正常为这个宗卷建立索引。
  • Indexing disabled.
    索引已经关闭。用 sudo mdutil -i on 加上宗卷路径开启。
  • Indexing and searching disabled.
    索引和搜索都已关闭,例如执行过 -d。用 -i on 可以恢复两者。
  • Indexing and searching disabled because of ".metadata_never_index" file at root of volume.
    宗卷顶层有一个名为 .metadata_never_index 的空文件,聚焦因此不处理这个宗卷。删除这个文件,再开启索引。
  • Error: unknown indexing state.
    路径不是宗卷的挂载位置。请使用 / 或 /Volumes 下面的磁盘路径。
  • Error: unexpected indexing state. kMDConfigSearchLevelTransitioning
    宗卷还在切换状态,通常出现在刚执行完另一条命令之后。等待几秒钟再执行一次。
  • Error: Index is already changing state. Please try again in a moment.
    和上一条相同,稍等片刻再试。
  • Error: unable to perform operation. Try as root. (-1)
    这项修改需要管理员权限,在命令前面加上 sudo。
  • Must be root to run this command
    -L、-P 和 -X 需要 sudo。
  • Error: invalid path
    这个路径不存在。检查拼写,名称里有空格时加上引号。
  • Spotlight server is disabled.
    mdutil 无法连接聚焦的后台服务。重新启动 Mac 后再查看。
  • No index.
    这个宗卷还没有聚焦索引。
  • Index is read-only.
    聚焦可以用现有的索引搜索,但不会更新它。
  • Server search enabled.
    网络宗卷使用服务器自己的索引提供搜索。

不用终端重建索引

Apple 官方的方法是在聚焦设置里重建某个磁盘或文件夹的索引:

  1. 从苹果菜单中选取“系统设置”,然后点按边栏中的“聚焦”(或“Siri 与聚焦”)。
  2. 向下滚动,点按窗口底部的“搜索隐私”(或“聚焦隐私”)按钮。
  3. 把磁盘或文件夹拖进列表,或者点按添加按钮(+)选择它。
  4. 等待几秒钟,在列表中选择它,然后点按移除按钮(–)。
  5. 点按“完成”。聚焦会重新为这个磁盘或文件夹建立索引。

Apple 在关于 Apple 设备上的“聚焦”索引和搜索结果里介绍了这些步骤。

相关命令

mdutil 负责维护索引,下面几条同样是 macOS 自带的命令,它们会用到这个索引:

  • mdfind 在终端里搜索索引,搜索方式和聚焦相同,例如 mdfind "季度报告";mdfind -name invoice 只匹配文件名。加上 -onlyin 和文件夹路径,可以只搜索那个文件夹。
  • mdls 列出聚焦为某个文件记录的元数据,例如 mdls ~/Desktop/report.pdf。
  • mdimport -L 列出聚焦读取各类文件时使用的导入插件。

常见问题

mdutil 需要 sudo 吗?

查看状态不需要。修改启动磁盘需要,对任何宗卷使用 -L、-P 和 -X 也需要。缺少 sudo 时,mdutil 会提示 Try as root 或 Must be root to run this command。

重建聚焦索引要多久?

取决于磁盘上的数据量。Apple 的说明是建立索引可能需要数小时甚至数天,Mac 闲置并接通电源时完成得更快。

怎样知道聚焦正在建立索引?

打开“活动监视器”,建立索引时 mds、mds_stores 和 mdworker 会占用处理器。搜索还不能使用时,聚焦窗口顶部也会显示进度条,不过进度条消失以后,索引可能还会继续建立一段时间。

清除索引会删除我的文件吗?

不会。-E 只删除聚焦的索引,macOS 会根据你的文件重新建立。新的索引完成以前,搜索结果会不完整。

MDUtil 和 Apple 的 mdutil 有关系吗?

没有关系。MDUtil(mdutil.com)是一套在浏览器里运行的免费 Markdown 工具,可以把 Markdown 转成 Word、PDF 和 HTML,也能转回来。Apple 的 mdutil 是 macOS 自带的命令,两者只是名称相同。