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

如何递归查找当前目录中使用空格缩进的文件?CI构建校验需求

递归检测目录中空格缩进文件的CI构建方案

我来帮你搞定这个CI里的缩进检测问题!要递归找出用空格缩进的文件并让构建失败,其实用shell命令就能轻松实现,而且兼容性拉满,适合各种CI环境。下面给你几种实用方案:

方案一:用系统内置工具(find + grep)—— 无需额外安装

这是最稳妥的方案,因为find和grep几乎是所有类Unix系统(包括CI常用的Ubuntu、Alpine等)的内置工具,不需要额外安装依赖。

核心命令逻辑

我们可以递归遍历文件,查找行首存在空格缩进的文件(缩进一般在行首,所以匹配行首空格更精准):

# 查找当前目录下所有行首有2个空格缩进的文件(排除隐藏文件/目录)
find . -type f -not -path '*/\.*' -exec grep -l '^  ' {} +

参数解释:

  • find . -type f:递归遍历当前目录下的所有普通文件
  • -not -path '*/\.*':跳过隐藏文件和隐藏目录(比如.git、.github),如果需要检查这些目录可以去掉这个参数
  • -exec grep -l '^ ' {} +:对每个文件执行grep,^ 表示行首有2个空格(如果是4个空格就改成^ ),-l只输出匹配到的文件名

集成到CI构建步骤

要让CI在检测到问题时失败,只需要判断命令输出是否非空,非空则返回错误状态码:

# 定义要检测的空格缩进长度(比如2个空格)
INDENT_PATTERN='^  '

# 查找所有违规文件
PROBLEM_FILES=$(find . -type f -not -path '*/\.*' -exec grep -l "$INDENT_PATTERN" {} +)

# 判断并处理结果
if [ -n "$PROBLEM_FILES" ]; then
  echo "❌ 错误:发现使用空格缩进的文件(要求使用制表符缩进):"
  echo "$PROBLEM_FILES"
  exit 1  # 返回非零状态码,让CI构建失败
else
  echo "✅ 所有文件缩进符合要求(使用制表符)"
fi

如果只需要检查特定类型的文件(比如代码文件),可以给find加上后缀过滤:

# 只检查Python、JavaScript、Java文件
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.java" \) -not -path '*/\.*' -exec grep -l '^  ' {} +

方案二:用项目代码规范工具(更全面)

如果你的项目已经在用代码规范工具(比如前端的ESLint、Python的flake8、通用的prettier),直接用这些工具来检测缩进会更专业,还能顺便检查其他代码规范问题:

示例:用ESLint检测前端项目

# 安装ESLint(如果CI环境没预装)
npm install eslint --save-dev
# 检查所有文件,强制要求用制表符缩进
npx eslint . --rule "indent: [\"error\", \"tab\"]"

这个命令会自动输出违规文件,并且返回非零状态码,CI会自动识别并失败。

示例:用flake8检测Python项目

# 安装flake8
pip install flake8
# 设置缩进为制表符(flake8默认检查4空格,这里修改配置)
echo "[flake8]" > .flake8
echo "indentation=tab" >> .flake8
# 执行检查
flake8 .

注意事项

  • 如果你的项目允许部分文件用空格缩进,可以在find命令里用-not -name排除这些文件,比如-not -name "*.md"(Markdown文件通常用空格缩进)
  • 有些二进制文件可能会被误判,所以建议只检查文本/代码文件,避免不必要的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:56