ファイルcache_temp
にファイルのリストがあります。
ファイルcache_temp
:
/home/maildir/mydomain.com/een/new/1491397868.M395935P76076.nm1.mydomain.com,S=1740,W=1777
/home/maildir/mydomain.com/een/new/1485873821.M199286P14170.nm1.mydomain.com,S=440734,W=446889
/home/maildir/mydomain.com/td.pr/cur/1491397869.M704928P76257.nm1.mydomain.com,S=1742,W=1779:2,Sb
/home/maildir/mydomain.com/td.pr/cur/1501571359.M552218P73116.nm1.mydomain.com,S=1687,W=1719:2,Sa
/home/maildir/mydomain.com/td.pr/cur/1498562257.M153946P22434.nm1.mydomain.com,S=1684,W=1717:2,Sb
cache_temp
からファイルのサイズを取得するための簡単なスクリプトがあります。
#!/bin/bash
for i in `grep -v ^# ~/cache_temp | grep -v "dovecot.index.cache"`; do
if [ -f "$i" ]; then
size=$(du -sh "$i" | awk '{print $1}')
echo $size
fi
done
ファイルのサイズのリストがあります:
4,0K
4,0K
4,0K
432K
4,0K
それらの合計をどのように計算できますか?
stat
の代わりにdu
を使用:
#!/bin/bash
for i in `grep -v ^# ~/cache_temp | grep -v "dovecot.index.cache"`; do
[ -f "$i" ] && totalsize=$[totalsize + $(stat -c "%s" "$i")]
done
echo totalsize: $totalsize bytes
Du(1)によれば、総計を生成することを目的とした-cオプションがあります。
% du -chs * /etc/passwd
92K ABOUT-NLS
196K NEWS
12K README
48K THANKS
8,0K TODO
4,0K /etc/passwd
360K total
ファイルを使用する必要がある場合、このスニペットが効率的であると期待されます。
xargs -a cache_file stat --format="%s" | paste -sd+ | bc -l
xargs
は、引数の制限をオーバーフローさせないようにするためのものですが、ファイルの最大数をstat
の1回の呼び出しで毎回取得します。
「du」コマンドから「-h」フラグを削除すると、未加工のバイトサイズが取得されます。次に、((a += b))
構文を使用してそれらを追加できます。
a=0
for i in $(find . -type f -print0 | xargs -0 du -s | awk {'print $1'})
do
((a += i))
done
echo $a
検索/ xargsの-print0
および-0
フラグは、空白を保持するためにnullで終了する文字列を使用します。
編集:@HBruijnコメントよりも入力が遅いことがわかりました!
まあ...良くも悪くも、これは私のこれの実装です。私は常に「while」を使用してファイルから行を読み取ることを好みました。
#!/bin/bash
SUM=0
while read file; do
SUM=$(( $SUM + $(stat $file | awk '/Size:/ { print $2 }') ))
done < cache_temp
echo $SUM
以下のjanosの推奨事項:
#!/bin/bash
while read file; do
stat $file
done < cache_temp | awk 'BEGIN { s=0 } $1 == "Size:" { s=s+$2 } END { print s; }'