"du"のすべての数字を足してください。

"du"のすべての数字を足してください。

我々が得た最初の数を計算したいと思います。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 onelinerでこれを行うにはどうすればよいですか?

答え1

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/*

答え2

選択したファイルの総数を生成することもできます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

答え3

簡単です。以下を使用できます。

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

ワイルドカードを使用せずに同様のディレクトリ名を使用する場合、出力は次のようになる/tmpため、最後の項目を避ける必要があります。du -b /tmp

size1 file1
size2 file2
size_total .

これで最後の項目を避ける必要があるので、次を使用してください。

du -b /tmp | awk 'BEGIN{i=0} {if( $2 != "." ){i=i+$1}} END{print i}'

ただし、このオプションを使用する-sと要約が計算されるため、値を追加することなく最後の値を印刷するだけです。例:

du -s directory

関連情報