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

Bash中如何优雅过滤Git文件列表 仅保留存在对应.spec.js的文件

优化方案

场景说明

需求为统计Git历史中改动频次最高、且当前存在同名.spec.js测试文件的.js源文件,用于优先推进spec测试格式转test格式的工作。
原有可用命令存在重复遍历重复文件条目做存在性校验的问题,优化后命令如下:

git log --pretty=format: --name-only -- '*.js' \
  | grep -vE '\.(spec|test)\.js$' \
  | sort | uniq -c \
  | while read -r count file; do
    [ -f "${file%.js}.spec.js" ] && printf "%s %s\n" "$count" "$file"
  done \
  | sort -rg | head -25

方案优势

  • 先对git输出的文件列表做去重统计,仅对唯一文件名执行一次存在性判断,避免重复IO操作,执行效率更高
  • 全程使用shell内置的文件测试符[ -f ]做存在性校验,不依赖ls命令,兼容性更好
  • 新增路径过滤参数-- '*.js',让git log仅输出js类文件,减少无关文件的处理开销
  • 新增grep规则过滤掉.spec.js、.test.js测试文件本身,避免把测试文件计入待转换的源文件列表
  • 变量加引号包裹、使用read -r读取文件名,可兼容带空格的特殊文件名场景

极致简洁的单行版本如下:

git log --pretty=format: --name-only -- '*.js'|grep -vE '\.(spec|test)\.js$'|sort|uniq -c|while read c f;do [ -f "${f%.js}.spec.js" ]&&echo $c $f;done|sort -rg|head -25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:51:19