我想計算我目前在git中檢出的分支的總工作副本大小(只有版本化的文件;沒有忽略的文件或文件還不是HEAD的後代)。目前,我嘗試這樣做:如何在git中獲取工作副本大小?
$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'
但是這需要時間瘋狂量並輸出一個數字,似乎沒有什麼意義:
29800260
我不知道這個數字是什麼。如果有更快或更準確的命令來做到這一點,請讓我知道。
我想計算我目前在git中檢出的分支的總工作副本大小(只有版本化的文件;沒有忽略的文件或文件還不是HEAD的後代)。目前,我嘗試這樣做:如何在git中獲取工作副本大小?
$ 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
可以在空議論:
git ls-files -z | xargs -0 du -k | awk '{total += $1} END {print total}'
花了這麼長的時間,你因爲git ls-files |
基本上是一個無操作,並du -k |
是管道爲當前目錄下的每個文件輸出。正是你想避免的!
如果路徑中有空格,則會中斷。我怎樣才能使它與空間一起工作?例子:'Subdir/With Spaces/file.txt' –
請注意,du
顯示文件佔用的磁盤空間量。這可能會有所不同,具體取決於文件系統類型和設置。例如,一個小的1字節文件可能會佔用4 KB的塊,或者其內容可能與元數據內聯存儲。
如果你想在庫中的所有文件的確切字節大小的總和,而不是,您可以使用此:
git ls-tree -r -l HEAD | cut -d' ' -f 4- | awk '{s+=$1} END {printf "%.0f\n", s}'
它使用存儲在Git的斑點大小,也適用於一裸倉庫。結果通常小於du
。
'du'不讀標準輸入,所以它會基本忽略你的'git'命令並遍歷整個目錄樹。 – tripleee