使用 git diff 和 grep 返回列表

使用 git diff 和 grep 返回列表

我正在使用 git diff 返回最近更改的文件的文件名,并且尝试将返回的文件名通过管道传输到 grep 表达式中,该表达式搜索每个文件并返回文件名中包含“*.yml”的文件实际文件中的“-name:”。然而,我的代码似乎只返回目录中符合条件的所有文件,基本上忽略了 git diff。

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

任何帮助将不胜感激!

答案1

git diff --name-only生成文件列表;你需要以grep它能够理解的形式提供该列表,IE作为命令行参数。一种方法是

git -C "${dir}" diff -z --name-only HEAD^ HEAD | xargs -0 grep -lw --include="*.yml" --exclude-dir="$excluded_paths" -e "- name:"

我添加了-z文件名,以便用空字节分隔;该选项指定在' 输入-0 xargs中使用相同的分隔符。xargs-rgrep— 中删除了用于递归搜索的选项,这会适得其反,因为给出了要检查的文件的确切列表。

相关内容