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

如何将find输出的文件名列表传递给jq?

问题与解决方法

错误原因

你之前的命令出错核心逻辑是:

  • find ... | jq '.' 会把find输出的文件名列表当作纯文本内容传给jq,而jq默认是解析标准输入的JSON数据,显然文件名不是合法JSON结构,因此触发解析错误。
  • jq --arg filename $1 '. $filename' 也无效,一是$1在此场景下未定义,二是同样把文件名文本传给jq解析,而非让jq加载对应文件。

正确命令

方法1:用find的-exec参数(推荐)

直接让find调用jq处理每个匹配到的文件:

find . -name 'reddit.*.flattened.json' -exec jq '.' {} +

{} 代表find匹配到的文件名,+ 表示将多个文件名批量传给jq,效率比逐个处理的\;更高。

方法2:用xargs配合管道

如果习惯用管道传递结果,用xargs把文件名转为jq的文件参数:

find . -name 'reddit.*.flattened.json' | xargs jq '.'

若文件名包含空格或特殊字符,建议加上参数避免出错:

find . -name 'reddit.*.flattened.json' -print0 | xargs -0 jq '.'

逻辑验证

单独执行jq '.' FILENAME能正常工作,是因为FILENAME是作为jq的文件参数,让jq读取该文件内的JSON内容;而管道传递的是文件名的文本本身,并非让jq加载文件的指令,这是两种完全不同的输入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:33:14