如何将“git ls-tree”限制为某些文件类型?

如何将“git ls-tree”限制为某些文件类型?

例如,我需要从提交中生成所有图像和 CSS 文件以及修改日期的列表。

git ls-tree -r --name-only HEAD | while read filename; do
  echo "$(git log -1 --format="%ad" -- $filename) $filename"
done

我该如何修改它以仅返回 jpg、gif、png 和 css 文件?

答案1

哦,我明白了@Marco - 谢谢。我没有想到我可以把 grep 混在一起,例如,这个小小的修改效果很好。

--name-only HEAD | grep ".css" | while...

答案2

由于您需要所有图像和 CSS 文件的列表,理想情况下,您应该将输出传输到类似以下内容的位置:

grep '.gif$\|.jpg$\|.png$\|.css$'

当然,您可以添加项目可能包含的更多相关扩展名,例如 .bmp。

如果我尝试,ls |grep -i '.gif$\|.jpg$\|.png$\|.css$'我会得到当前文件夹中具有给定扩展名的所有文件的列表。

让我们仔细看看这个命令:

$确保不会匹配任何不需要的文件,例如 .css.bak。$匹配行尾。

\|允许您指定多个模式,因此您不需要调用多个git ls-tree来获取整个列表。

如果您的 repo 包含任何带有大写扩展名的文件,您可能需要添加这些文件-i以便不区分大小写地运行 grep。

单个之间的模式'确保点被解释为点,而不是正则表达式中的“任何字符”。

相关内容