我想计算我当前在git中签出的分支的总工作副本大小(仅限版本化文件;不包括被忽略的文件或尚未成为HEAD后代的文件)。目前我尝试了以下方法:
$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'
然而,这需要极其漫长的时间,并且输出的数字似乎没有意义:
29800260
我不确定这个数字是什么意思。如果有更快或更准确的命令,请告诉我。
我想计算我当前在git中签出的分支的总工作副本大小(仅限版本化文件;不包括被忽略的文件或尚未成为HEAD后代的文件)。目前我尝试了以下方法:
$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'
29800260
我不确定这个数字是什么意思。如果有更快或更准确的命令,请告诉我。
你走在正确的路上,但应该使用反引号而不是竖线。
du -k `git ls-files` | awk '{total += $1} END {print total}'
如果你需要考虑空格问题,git ls-files
和xargs
都可以使用null字符来处理:
git ls-files -z | xargs -0 du -k | awk '{total += $1} END {print total}'
你花了很长时间是因为git ls-files |
本质上没有做任何操作,而du -k |
为每个文件从当前目录向下传输输出。这正是你试图避免的!
Subdir/With Spaces/file.txt
- void.pointerdu
显示文件占用的磁盘空间大小。这可能会因文件系统类型和设置而异。例如,一个小的 1 字节文件可能会占用 4 KB 的块,或者其内容可能与元数据一起存储。git ls-tree -r -l HEAD | cut -d' ' -f 4- | awk '{s+=$1} END {printf "%.0f\n", s}'
这个程序使用存储在Git中的blob大小,并且适用于裸仓库。结果通常比du
命令得到的更小。
du
不会读取标准输入,因此它基本上会忽略你的git
命令并遍历整个目录树。 - tripleee