You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下如何将Shell变量中的路径列表传入GNU updatedb选项?

解决macOS下GNU updatedb传递$PRUNEVOLS变量的问题

核心问题

你之前的调用失败,本质是shell变量展开时的空格拆分问题:当$PRUNEVOLS以空格分隔存储路径时,直接传递会被shell拆分成多个独立参数,而updatedb需要--prunepaths后面接收一个完整的、包含空格分隔路径的字符串参数。

直接修复的调用方式

如果保留当前$PRUNEVOLS的初始化方式,只需用双引号包裹--prunepaths的参数值,确保变量正确展开且作为整体传递:

updatedb --localpaths='/' --prunepaths="/System $PRUNEVOLS"

更安全的初始化+调用方案

原ls + grep的初始化方式在路径包含空格时会出错(比如/Volumes/My First Vol会被拆分成多个片段),建议改用数组存储路径,再拼接成字符串:

# 初始化数组,排除/Volumes/IndexMe
PRUNEVOLS=()
for vol in /Volumes/*; do
    [[ "$vol" != "/Volumes/IndexMe" ]] && PRUNEVOLS+=("$vol")
done

# 将数组转为空格分隔的字符串,包含/System
PRUNEPATH_LIST="/System ${PRUNEVOLS[*]}"

# 正确调用updatedb
updatedb --localpaths='/' --prunepaths="$PRUNEPATH_LIST"

为什么之前的方式失败?

  • 若用单引号包裹参数:--prunepaths='/System $PRUNEVOLS',单引号会阻止shell解析变量,$PRUNEVOLS会被当成字面字符串传递。
  • 若不包裹直接传递:--prunepaths=/System $PRUNEVOLS,$PRUNEVOLS里的每个路径会被shell拆分成独立参数,updatedb会把这些当成额外的命令行参数而非--prunepaths的有效值。

内容的提问来源于stack exchange,提问作者halloleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:01:09