特定のフォルダ以下でのディスク容量
そもそもの始まりは
dir1から4まであって、 find ./dir1 -type f | wc -c で調べて26240973 と出てbyte だと理解してるけど、ディレクトリ1〜4の合算結果がdf -h のused より大きくなるんだけど計算どこが違うんだろ。。
— wataru kashii (@kecy_) 2017年7月27日
という自分のTweet。
どうも実行結果が計算合わない。。
現在のサーバを、どの程度ディスク容量使っているのかを調べるのに自分はよく
$ df -h
を使います。
このdf コマンドは実バイトを返さないということを知ったので詳細なデータを知りたい場合、例えば画像フォルダが何十万とあるフォルダ以下のバイト数を調べるにはどうしたらいいのか。
1. find DIR -type f | wc -c
自分が最初に行ったパターンです。明らかに違いました。この場合だと、参照先のファイル名の長さの総和に確かになってました。。
find dir -type f | wc -c ですが、ちと落ち着いてやってることを見てみましょう。これってファイル名の長さの総和を計算してることに・・・なってない?
— ぱぴろんちゃん👓 (@papiron) 2017年7月27日
2. find DIR -type f | xargs ls -l | awk '{sum+=$5}END{print sum}'
このパターンは、Twitterで教えていただきました。この場合うまくいきました。この場合だと、ls -l で隠しファイルを含めないので純粋に画像のバイト数の総和を出すことが出来ました。
3. find DIR -type f | xargs wc -c | grep total | awk '{sum+=$1}END{print sum}'
wc -c でバイト数を計算する方法です。ただ、grep total | awk '{sum+=$1}END{print sum}' をつけないとwc -c | tail -n 1 の場合だと、うまくいかなかったのですがこちらに関しても教えてくださいました。
xargsは大量のデータを受けた時に、コマンド最大長制限いっぱいで区切って実行しているのを忘れていました。この記事と同じ現象が起きているということです。 https://t.co/YwSApV04is
— ぱぴろんちゃん👓 (@papiron) 2017年7月28日
4. du -sh DIR
こちらの場合ですと、隠しフォルダのバイト数も含まって純粋な画像データとしては出せませんがシンプルという意味では使えるかなと思いました。
コマンドを扱う場合にオーバーフローが起こる可能性や、コマンド最大長があるということも知っていい勉強になりました。