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:"))
任何帮助将不胜感激!
这个有用吗?
read -ra files < <(
git -C $"dir" diff --name-only HEAD^ HEAD |
grep -rlw --include='*.yml' --exclude-dir="$excluded" -e "- name:"
)
printf '%s\n' "${files[@]}"
经过一些修改,这应该按预期工作:
files=$(git -C ${dir} diff --name-only HEAD^ HEAD | grep "\.yml$" | xargs grep -l "- name:")
可能会出现grep命令找不到任何匹配的情况,这会导致xargs出错。您可以为此添加支票。