Subscribed unsubscribe Subscribe Subscribe

指定ディレクトリ以下のファイルサイズの合計を取得するワンライナー

あるディレクトリ以下にあるファイルのサイズの合計を知りたいとき。
MacならFinderから右クリック→「情報を見る」で知ることはできるのだけど、コマンドから知ることはできるのだろうか?と調べてみた。
ディレクトリ中のファイルサイズ合計値を バイト表示
duコマンドが近い機能を持っているが、バイト単位では知ることができないみたい。*1

$ find -type f -printf "%s\n" |perl -ne '$sum += $_; print "\r$sum"'

Linuxではこうやってfindから得る値を計算していくことになるらしい。


しかしMacのfindコマンドはLinuxGNU findとは違うので、"-printf"というオプションが使えないようだ。
仕方ないのでlsオプションで表示させた詳細情報の7列目を取得することにした。

find <directory name> -type f -ls | perl -alne '$s += $F[6]; END { print $s }'

例:

$ find ~/Dropbox -type f -ls | perl -alne '$s += $F[6]; END { print $s }' 
5357572


上記ページでは「ファイルの個数とファイルサイズを表示。ファイルサイズは3桁ごとにカンマで区切る」ということもやっていたので、真似してみる。

find <directory name> -type f -ls | perl -alne '$n++,$s+=$F[6]; END { $s=~s/(\d{1,3})(?=(\d{3})+$)/$1,/g; print "$n files, $s bytes" }'

例:

$ find ~/Dropbox -type f -ls | perl -alne '$n++,$s+=$F[6]; END { $s=~s/(\d{1,3})(?=(\d{3})+$)/$1,/g; print "$n files, $s bytes" }' 
86 files, 5,357,572 bytes

*1:追記:そんなことなかった。Linuxのduには-bオプションがあった。ただし'.'や'..'のサイズも含まれてしまうみたい