使用git diff和grep返回列表

z9ju0rcb  于 2023-05-12  发布在  Git
关注(0)|答案(2)|浏览(132)

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

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

任何帮助将不胜感激!

iyzzxitl

iyzzxitl1#

使用这个,使用最佳实践来馈送数组,并避免以下形式:

arr=( $(cmd) )

而是用途:

read -ra files < <(
    git -z -C "$dir" diff --name-only HEAD^ HEAD | grep -z '\.yml$'
)
printf '%s\n' "${files[@]}"

来自gitgrep-z旨在解析包含换行符或特殊字符的偶数文件。

kgqe7b3p

kgqe7b3p2#

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

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

可能会出现grep命令找不到任何匹配项的情况,这将导致xargs中的错误。您可以为此添加一个检查。

相关问题