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

如何在多扩展名目录中用Bash脚本批量执行jsonlint检查JSON文件

解决npm脚本中仅处理单个JSON文件的问题

我来帮你搞定这个问题!首先得说,你之前的命令问题出在两个地方:一是路径匹配写错了,二是用ls传给xargs的方式不太靠谱。

先给你几个直接能用的正确写法

方法1:直接用Glob匹配(最简单)

如果你的目标目录里没有嵌套子目录,直接用路径通配符就能搞定所有.json文件:

jsonlint -q folder/subfolder/*.json

把这个写到npm脚本里就行,Bash会自动把所有匹配到的.json文件作为参数传给jsonlint,不需要xargs多此一举。

方法2:用find命令(更健壮,支持嵌套目录)

如果你的folder/subfolder下面还有子目录,或者文件名里有空格、特殊字符,用find更稳妥:

find folder/subfolder -type f -name "*.json" -exec jsonlint -q {} +

解释下参数:

  • -type f:只找文件(排除目录)
  • -name "*.json":只匹配后缀为.json的文件
  • -exec jsonlint -q {} +:把所有找到的文件一次性传给jsonlint,和xargs效果一样但更安全

方法3:如果一定要用xargs(不推荐,但满足你的需求)

要是你坚持想用xargs,别用ls,改用printf或者find输出文件路径:

# 用printf输出路径
printf "%s\n" folder/subfolder/*.json | xargs jsonlint -q

# 或者用find配合xargs
find folder/subfolder -type f -name "*.json" | xargs jsonlint -q

为什么你的原命令不行?

你写的ls folder/subfolder/ *.json其实做了两件事:

  1. 列出folder/subfolder/目录下的所有内容(包括非.json文件)
  2. 列出当前目录下的所有.json文件

这就导致输出里混了一堆无关文件,而且ls的输出格式不适合机器处理——如果文件名里有空格,xargs会把它拆成多个参数,直接报错或者只处理一部分。另外,你想匹配的是子目录里的.json,正确的通配符应该是folder/subfolder/*.json,而不是分开写两个路径。

npm脚本示例

最后给你个package.json里的配置参考:

{
  "scripts": {
    "lint:json": "jsonlint -q folder/subfolder/*.json",
    "lint:json:recursive": "find folder/subfolder -type f -name \"*.json\" -exec jsonlint -q {} +"
  }
}

直接运行npm run lint:json或者npm run lint:json:recursive就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:45