Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2014-07-21

あるディレクトリ以下の総ファイルサイズを取得するには

あるディレクトリ以下の総ファイルサイズを取得する際に、

$ du -hs ディレクトリ

のように、duコマンドを使った例を紹介されることが多いのですが、

duコマンドが返すのはブロックサイズであり、ファイルサイズではないため正確な数値は得られません。

(ちなみに、「-s」は総合計サイズのみを表示するオプションで、

「-h」は人間にわかりやすい単位で表示するオプションです。)


例えば、以下のような実験でわかります。

$ mkdir dir_size_test
$ echo -n 'hello' > dir_size_test/hello.txt
$ ls -l dir_size_test/hello.txt
-rw-r--r-- 1 yarakawa yarakawa 5  721 15:59 dir_size_test/hello.txt
$ du -hs dir_size_test/
8.0K    dir_size_test/

「dir_size_test」の中にあるファイルは「hello.txt(5バイト)」のみで、

ls -l」の結果では5バイトと表示しているのに対し、

「du -hs」の結果では8.0Kバイトと表示しています。


他にやり方はあるのかもしれませんが、

「あるディレクトリ以下の総ファイルサイズを知りたい」

という場合は以下のようなコマンドを実行すべきと思います。

$ find 対象ディレクトリ -type f -printf '%s\n' | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'

findコマンドで「対象ディレクトリ」以下について、

「-type f」オプションによりすべてのファイルを一覧し、

「-printf '%s\n'」のオプションで各行にバイト数を出力しています。

それを、パイプでawkにつなぎ、awkではawk内でsumという変数を0クリアし、

各行を処理する際にその値をsumに加えていき、最後に変数sumの値を表示しています。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/cupnes/20140721/1405926640
リンク元