使用 git diff 和 grep 返回列表

问题描述 投票:0回答:2

0

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

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

任何帮助将不胜感激!

bash git grep diff
2个回答
0
投票

这个有用吗?

read -ra files < <(
    git -C $"dir" diff --name-only HEAD^ HEAD |
    grep -rlw --include='*.yml' --exclude-dir="$excluded" -e "- name:"
)
printf '%s\n' "${files[@]}"

0
投票

经过一些修改,这应该按预期工作:

files=$(git -C ${dir} diff --name-only HEAD^ HEAD | grep "\.yml$" | xargs grep -l "- name:")

可能会出现grep命令找不到任何匹配的情况,这会导致xargs出错。您可以为此添加支票。

© www.soinside.com 2019 - 2024. All rights reserved.