通常、du -ks $DIRECTOY_TREE_ROOT
を使用してディレクトリツリー全体のサイズを見積もりますが、zfs圧縮がオンの場合、この方法は使用できません。
ls -l
によって表示されるtotal
は、単一のディレクトリでは問題ありませんが、ディレクトリツリーで同じ結果を得る最も簡単な方法はどれですか。
編集:
オペレーティングシステムはSolaris10です。
ディスク上で使用されているスペースではなく、実際のファイルサイズを探しています。
これはうまくいくはずです:
find . -type f -exec ls -l {} + | nawk '{s=s+$5}
END {print s}'
du -b
の例を使用してください:
# du -sh .
215G .
# du -sbh .
344G .
コマンド「find」からパラメータ「-is」を使用して、ファイルサイズとおおよそのディスク使用量の両方を直接取得することが可能です。
function lsdu() (
export SEARCH_PATH=$*
if [ ! -e "$SEARCH_PATH" ]; then
echo "ERROR: Invalid file or directory ($SEARCH_PATH)"
return 1
fi
find "$SEARCH_PATH" -ls | gawk --lint --posix '
BEGIN {
split("B KB MB GB TB PB",type)
ls=hls=du=hdu=0;
out_fmt="Path: %s \n Total Size: %.2f %s \n Disk Usage: %.2f %s \n Compress Ratio: %.4f \n"
}
NF >= 7 {
ls += $7
du += $2
}
END {
du *= 1024
for(i=5; hls<1; i--) hls = ls / (2^(10*i))
for(j=5; hdu<1; j--) hdu = du / (2^(10*j))
printf out_fmt, ENVIRON["SEARCH_PATH"], hls, type[i+2], hdu, type[j+2], ls/du
}
'
)
いくつかのサンプルコマンドと出力:
-bash-3.00# lsdu test_sloccount/
Path: test_sloccount/
Total Size: 30.90 MB
Disk Usage: 1.43 MB
Compress Ratio: 21.6250
完全を期すために、FreeBSDに関するこの質問への回答を含めます。による man du
:
-A Display the apparent size instead of the disk usage. This can be
helpful when operating on compressed volumes or sparse files.
このワンライナーは、望ましい結果を生み出すはずです。
find $DIRECTOY_TREE_ROOT -type d -exec ls -l '{}' \; | awk '/^total\ .[0-9]+$/ { sum+=$(NF) }END{ print sum }'
テストするZFSパーティションがありませんが、ext4パーティションではdu -ks
と同じ結果が出力されます。
man duはおそらくここで役立ちます:
--apparent-size
print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be larger
due to holes in (`sparse') files, internal fragmenta-
tion, indirect blocks, and the like