web-dev-qa-db-ja.com

小数点以下の桁数が多い「du-h」

Linux上のゲームサーバーに関する情報を提供するbashで記述された小さなutilツールに取り組んでいます。そのため、ファイルの内容のサイズを表示する可能性が必要です。

私はこれを使って今それをやっています:

du -Lshc *

それはほぼ完璧に動作します!唯一の欠点は、次のようなものが表示されることです。

21G     backups
22G     server
8.0K    start.sh
151M    world.Zip
43G     total

これは問題ありませんが、もっと多くの桁が必要です。つまり、次のようになります。

21.587G     backups
22.124G     server
8.089K      start.sh
151.198M    world.Zip
43.436G     total

それを行う可能性はありますか?

.shファイルで使用するので、複雑なコマンドを使用してもかまいません。そのため、毎回手動で入力する必要はありません。

4
BrainStone
du -Lsbc * | awk '
    function hr(bytes) {
        hum[1024**4]="TiB";
        hum[1024**3]="GiB";
        hum[1024**2]="MiB";
        hum[1024]="kiB";
        for (x = 1024**4; x >= 1024; x /= 1024) {
            if (bytes >= x) {
                return sprintf("%8.3f %s", bytes/x, hum[x]);
            }
        }
        return sprintf("%4d     B", bytes);
    }

    {
        print hr($1) "\t" $2
    }
'

this に基づくawk-function。

columnにパイプするか、スペースを左に埋めることで、出力の見栄えを少し良くすることができます。

編集:左パディングを追加しました。

また、リストを並べ替えるには:du -Lsbc * | sort -n | awkそしてawk-script。

5
n.st