【发布时间】:2015-05-08 00:10:02
【问题描述】:
我正在尝试过滤 git ls-files 的输出以获取某些报告命令,然后将该输出通过管道传输到 xargs。我最初在 git ls-files 上使用 -z 效果很好,但现在我正在使用 grep,我需要恢复该功能。
尝试 grep 版本 -Z 对实际输出没有任何作用。
git ls-files | grep -Z -e={\*.js,\*.html}
【问题讨论】:
我正在尝试过滤 git ls-files 的输出以获取某些报告命令,然后将该输出通过管道传输到 xargs。我最初在 git ls-files 上使用 -z 效果很好,但现在我正在使用 grep,我需要恢复该功能。
尝试 grep 版本 -Z 对实际输出没有任何作用。
git ls-files | grep -Z -e={\*.js,\*.html}
【问题讨论】:
grep 的-Z 选项似乎只适用于包含匹配内容的文件名,而不适用于匹配行的内容。这对我来说似乎很奇怪,但这似乎是它的工作原理。
你实际上并不需要 grep 在这里(你不需要原来的 * 或者它没有增加任何价值)。
git ls-files 采用一个模式来匹配文件名。
所以你想在这里使用这个命令。
git ls-files -z -- '*.js' '*.html'
【讨论】:
ls-files 可以显示未跟踪的文件。它只能显示被忽略的文件。它还具有排除模式支持。
--exclude 参数不适用。我正在编写这些命令来快速计算作者编写的行数。我最初只想排除二进制文件列表,而不是将特定文件列入白名单 - 但我认为这两种方式实际上都同样冗长,所以这不是问题。