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

使用git diff与grep筛选符合条件的变更文件遇阻求助

问题:Git Diff结果未被正确过滤,Grep返回全目录符合条件文件

我尝试通过git diff获取最近一次提交(HEAD^到HEAD)的变更文件名,再用Grep筛选出后缀为*.yml且内容包含"- name:"的文件,但当前代码未达到预期效果——它返回了目录中所有符合条件的文件,完全忽略了git diff输出的变更文件列表。

错误代码

files=($(git -C ${dir} diff --name-only HEAD^ HEAD | grep -rlw --include="*.yml" --exclude-dir=$excluded -e "- name:"))

解决方法

已解决!核心调整是将git diff的结果单独存入变量,避免Grep默认的递归扫描整个目录,转而只针对变更文件进行筛选。

正确代码

# 获取变更文件列表
git_diff_files=($(git -C ${prov_dir} diff --name-only HEAD^ HEAD))

# 拼接文件的完整路径
changed_files_full=($(printf "${dir}/%s " "${git_diff_files[@]}" ))

# 针对变更文件筛选符合条件的.yml文件
changed_files_ansible=($(find "${changed_files_full[@]}" -type f -print0 | xargs -0 grep -lw --include="*.yml" --exclude-dir="$excluded" -e "- name:"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:04