指定したディレクトリの総容量を計算する

スクリプト名: lsdu.sh
書式: lsdu.sh ディレクトリ名
目的: ls -lの結果でディレクトリの容量を計算して表示する
戻り値: 成功:0 失敗:1 エラー:9

#!/bin/sh
. Error_Msg.sh && . Arg_Nums.sh && . Tmp_Lock.sh && . Chk_File.sh || exit 9
Arg_Nums -ge 1 "$@" || exit 9
Chk_File -drx "$1" ||\
{ Error_Msg "$0" "$1: Permission denied."; exit 1; }

#一時ファイルの作成
Tmp_Lock -tm 1 || exit 9
trap "Tmp_Lock -tr 1; exit 9" 1 2 3 9 15

#lsコマンドの結果をwhile readに渡し変数に格納する
ls -lA "$1" | sed 1d | \
while read \
_TYPE_PERM _HEAD_LINE _UID _GID _SIZE _MONTH _DAY _TIME_YEAR _FILE_NAME; do
    #ファイルタイプを抜き出す
    _FILE_TYPE=$(echo $_TYPE_PERM | cut -c1)

    #ディレクトリならば容量表示を差し替え
    if [ $_FILE_TYPE = d ] ; then
        _SIZE=$(du -bs "$1/$_FILE_NAME" 2>/dev/null | awk '{print $1}')

        #許可属性の関係で正確な容量を割り出せない場合
        du -bs "$1/$_FILE_NAME" &>/dev/null
        if [ $? != 0 ]; then
            _SIZE="+$_SIZE"
        fi
    fi

    #一時ファイルに保存
    echo $_TYPE_PERM $_HARD_LINK $_UID $_GID $_SIZE $_MONTH $_DAY \
        $_TIME_YEAR $_FILE_NAME >> "$_TMP_LOCK_FILE"
done

cat "$_TMP_LOCK_FILE"
Tmp_Lock -tr 1 || exit 9