我如何计算在一个git存储库中所有文件中出现的总行数?
Git ls-files给了我一个由Git跟踪的文件列表。
我正在找一个命令来隐藏所有这些文件。类似的
git ls-files | [cat all these files] | wc -l
我如何计算在一个git存储库中所有文件中出现的总行数?
Git ls-files给了我一个由Git跟踪的文件列表。
我正在找一个命令来隐藏所有这些文件。类似的
git ls-files | [cat all these files] | wc -l
当前回答
Carl Norum的答案假设没有带空格的文件,IFS的一个字符是制表符和换行符。解决方案是用NULL字节终止该行。
git ls-files -z | xargs -0 cat | wc -l
其他回答
Try:
find . -type f -name '*.*' -exec wc -l {} +
在有问题的目录上
我是这样做的:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
如果将存储库中的所有文本文件都计算为感兴趣的文件,那么这是可行的。如果其中一些被认为是文档等,则可以添加排除过滤器。
Xargs会让你把所有文件放在一起,然后把它们传递给wc,就像你问的那样:
git ls-files | xargs cat | wc -l
但是跳过中间的cat会给你更多的信息,可能会更好:
git ls-files | xargs wc -l
如果你想从某个作者那里获得行数,试试下面的代码:
git ls-files "*.java" | xargs -I{} git blame {} | grep ${your_name} | wc -l
在处理大量文件时,我遇到过git ls-files | xargs wc -l的批处理问题,其中的行数将被分块成多个总行。
从问题中得到一个提示,为什么wc实用程序生成多行“total”?,我发现下面的命令可以绕过这个问题:
wc -l $(git ls-files)
或者如果你只想检查一些文件,例如代码:
Wc -l $(git ls-files | grep '.*\.cs')