bash - 根据路径过滤或忽略目录列表
问题描述
我有以下命令来查找与master
.
git --no-pager diff --diff-filter=AM --name-status --no-renames $(git merge-base ${1:-master} HEAD)
这给了我一个类似于下面的输出:
M platform/team-a/dev/module/submodule/file.py
M platform/team-b/prod/module/config.yaml
A README.md
理想情况下,我想忽略根目录中已更改的文件。在上面的示例中,我想忽略 ,README.md
因为我只关心platform/
.
我的完整代码看起来像这样,有遗漏:
while read -r status file; do
case $status in
A)
DIRNAME="$(dirname "${file}")" && \
echo file in $$DIRNAME was created && \
cd $$DIRNAME && \
# do something
;;
M)
DIRNAME="$(dirname "${file}")" && \
echo file in $$DIRNAME was modified && \
cd $$DIRNAME && \
# do something
;;
esac
done < <(git --no-pager diff --diff-filter=AM --name-status --no-renames $(git merge-base ${1:-master} HEAD) | sort -k 1,1)
$$VAR 是 GCP 云构建约定
如果忽略列表可以轻松配置,那就太好了,所以我可以说 if file in['.', 'docs/', 'platform/designs'] then skip
作为示例。
我的 bash 技能很少,因此不确定解决此问题的最佳方法,否则我会在 while 循环中编写脏 if 语句。
解决方案
推荐阅读
- mysql - MySQL获取计数为百分比
- javascript - innerHTML 修改整个数组
- swift - 具有多个单元格的 TableView
- r - 从 txt 中读取字符并使用分页符编织
- c++ - 是否可以隐藏像 BOOST_LOG_TRIVIAL(lvl) 这样的宏
- c# - 在 ClientMessageInspector 和 ServerMessageInspecter 中识别是休息调用还是 WCF 调用
- c# - 使用 DNN 进行 Windows 身份验证
- android - 使用数据绑定时如何修复 InflateException 错误膨胀类片段
- reactjs - 如何在 ubuntu 上为数字海洋设置防火墙?
- c - 无法使用带有 FFTW 的 FFT 检索原始图像