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

Bash过滤指定扩展名文件:pre-commit调用Rubocop排除png/svg方法

解决方案

Rubocop 显式指定输入文件时,默认会忽略配置文件中的 exclude 规则,因此必须要么提前过滤目标文件,要么开启强制排除参数,以下是3种可直接使用的实现方案:

方案1:用grep反向过滤指定后缀

最轻量化的实现,直接在文件流中去掉.png、.svg结尾的文件:

#!/usr/bin/env bash

set -e

git diff --staged --diff-filter=d --name-only \
  | grep -vE '\.(png|svg)$' \
  | xargs bundle exec rubocop

参数说明:

  • grep -E 开启正则匹配
  • grep -v 反向过滤,即移除符合匹配规则的行
  • 正则\.(png|svg)$匹配所有以.png、.svg为后缀的文件名

方案2:兼容带空格的文件名(更稳定)

如果项目中存在文件名包含空格、换行等特殊字符的场景,使用null字符作为分隔符的版本可以避免xargs拆分错误:

#!/usr/bin/env bash

set -e

git diff --staged --diff-filter=d --name-only -z \
  | grep -vzE '\.(png|svg)$' \
  | xargs -0 bundle exec rubocop

这里新增的-z(git、grep参数)和-0(xargs参数)都是指定用null字符作为文件分隔符。

方案3:直接让Rubocop强制遵守排除规则

不需要在脚本中硬写过滤规则,给Rubocop增加--force-exclusion参数即可,即使是显式传入的文件也会遵守.rubocop.yml中的exclude规则:

#!/usr/bin/env bash

set -e

git diff --staged --diff-filter=d --name-only | xargs bundle exec rubocop --force-exclusion

该方案的优势是所有排除规则统一维护在Rubocop配置中,后续新增排除类型不需要修改hook脚本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:05