如何递归查找当前目录中使用空格缩进的文件?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
相关产品推荐
相关产品推荐

