Landscape トップページ | < 前の日 2004-05-25 2004-05-26 次の日 2004-05-27 >

Landscape - エンジニアのメモ 2004-05-26

ディレクトリ中のファイルサイズ合計値を バイト表示


* ディレクトリ中のファイルサイズ合計値を バイト表示

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [シェルスクリプト] [unix]

Windows では、ディレクトリのアイコンを右クリックしてプロパティを表示させると、そのディレクトリ以下のファイルのサイズの合計値がバイト単位で表示される。併せて、ファイル数やクラスタギャップを含めたディスク上のサイズも表示される。ちなみに、プロパティは ALT + ディレクトリアイコンのダブルクリックでも表示される。

Linux や Unix のコマンドラインで操作しているときも、同じ情報を表示させたい。

- du じゃブロックサイズの表示なのでダメ

すぐに思いついたのは du コマンドだが、du はファイルサイズではなくファイルが使っているブロックサイズを表示するのでダメだ。-b オプションをつけてバイト単位で表示させても、ブロックサイズをバイト単位で表示するだけなので今回の目的には使えない。以下、実行結果。ls では 29バイトなのに du ではブロック1個分の 4096バイトになっているのがわかる。

$ date >date.txt
$ ls -l date.txt
-rw-r--r--    1 hiroaki  hiroaki        29 May 25 12:50 date.txt

$ du -b date.txt
4096    date.txt

ls や du の man を読んでみたが、一発で解決してくれるようなオプションは無かった。

Manpage of LS
http://www.linux.or.jp/JM/html/GNU_fileutils/man1/ls.1.html

Manpage of DU
http://www.linux.or.jp/JM/html/GNU_fileutils/man1/du.1.html

- コマンドを組み合わせて合計値を表示させる

こうなったらコマンドを組み合わせて望みの値を得るスクリプトを書くしかないでしょう。One Liner でも書けるかな。

特定ディレクトリ下を再帰的に検索するなら find の出番だ。man を見ると出力書式もかなり自由だし、いろいろできそう。find にファイルサイズを出力をさせて、それを合計してやればいいわけだ。合計くらいなら sh や bash などのシェルでもできそうだけど、パフォーマンス気にするわけでもないし、perl でいいか。文法調べるの大変だし。

Manpage of FIND
http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.htm ...

- ディレクトリを再帰的にたどって、ファイルの合計サイズを出力する。

$ find -type f -printf "%s\n" |perl -ne '$sum += $_; print "\r$sum"'
一気にカウントが増えていくとこがかっこいい。ガソリンスタンドで給油量のカウンタについ見入ってしまうみたいな感覚。

- ディレクトリを再帰的にたどって、ファイルの合計サイズを出力する awk 版。

でも 必要ないのに重い perl 使う理由は無いよね。awk でいいか。--help したらサンプル載ってたし。awk だと END っていうのがあるので、\r を使わずに書けるんだね。
$ find -type f -printf "%s\n" |awk '{sum += $1; printf "\r" sum };'
$ find -type f -printf "%s\n" |awk '{ sum += $1; }; END { print sum }'

- ファイルの個数とファイルサイズを表示。ファイルサイズは3桁ごとにカンマで区切る。

$ find -type f -printf "%s\n" |perl -ne '$i++; $byte += $_; $str = "\r$i files, $byte byte"; $str =~ s/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/$1,/g; print $str'
カンマが入っただけでもかなり雰囲気が変わる。なんだか「日本の借金カウンタ」みたいな感じがする。

- 他に欲しい機能は・・・

あとは再帰的にディレクトリをたどって、ディレクトリ毎にそのディレクトリが持つ容量を表示する機能が欲しいかなあ。要するに、du みたいに表示してほしいってこと。上記スクリプトはカレントディレクトリの容量しか表示しないけど、それを一気にやる機能。必要になったら作ろう。

- このコマンドの名前をどうしよう?

du - disk usage に対抗して bu - byte usage ってのはどうだろう? いかん、私ってセンス無い。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。