Linux

將“du”中的所有數字相加

  • March 8, 2019

我們想計算我們從中得到的第一個數字du

du -b /tmp/*
6       /tmp/216c6f99-6671-4865-b8bc-7205f5388752_resources
668669  /tmp/hadoop7887078727316788325.tmp
6       /tmp/hadoop-hdfs
42456   /tmp/hive
32786   /tmp/hsperfdata_hdfs
6       /tmp/hsperfdata_hive
32786   /tmp/hsperfdata_root
262244  /tmp/hsperfdata_yarn

所以最終總和將是

sum=6+668669+6+42456+32786+6+32786+262244


echo $sum

我們如何通過 awk 或 perl 來做到這一點?

在 AWK 中:

{ sum += $1 }
END { print sum }

所以

du -b /tmp/* | awk '{ sum += $1 } END { print sum }'

/tmp請注意,如果目錄下的目錄本身俱有子目錄,則結果將不正確,因為du會在目錄及其子目錄上生成執行總計。

du -s將為您正確計算總和(在 中的所有子目錄和文件/tmp,包括隱藏的文件):

du -sb /tmp

並將du -c正確計算列出的目錄和文件的總和:

du -cb /tmp/*

您還可以使用du -c. 即使 的參數du不是目錄,這也有效,但 的情況並非如此du -s

$ du -sb file1 file2
17  file1
18  file2

$ du -cb file1 file2
17  file1
18  file2
35  total

順便說一句,對於互動式使用,我建議添加-h選項而不是-b塊大小的任何其他乘數。這將以人類可讀的單位格式列印尺寸。

$ du -ch file1 file2
4.0K    file1
4.0K    file2
8.0K    total

引用自:https://unix.stackexchange.com/questions/503601