我正在使用 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
我-r
从grep
— 中删除了用于递归搜索的选项,这会适得其反,因为给出了要检查的文件的确切列表。