du出力をサイズでソートする方法は?

du出力をサイズでソートする方法は?

du -sh /dir/*サイズ別にどのように並べ替えますか?を使用するようにウェブサイトを読ん| sort -nだが、明らかに真実ではありません。これは間違った例です。

[~]# du -sh /var/* | sort -n
0       /var/mail
1.2M    /var/www
1.8M    /var/tmp
1.9G    /var/named
2.9M    /var/run
4.1G    /var/log
8.0K    /var/account
8.0K    /var/crash
8.0K    /var/cvs
8.0K    /var/games
8.0K    /var/local
8.0K    /var/nis
8.0K    /var/opt
8.0K    /var/preserve
8.0K    /var/racoon
12K     /var/aquota.user
12K     /var/portsentry
16K     /var/ftp
16K     /var/quota.user
20K     /var/yp
24K     /var/db
28K     /var/empty
32K     /var/lock
84K     /var/profiles
224M    /var/netenberg
235M    /var/cpanel
245M    /var/cache
620M    /var/lib
748K    /var/spool

答え1

GNU coreutils(ほとんどのLinuxディストリビューションで共通)がある場合は、次のものを使用できます。

du -sh -- * | sort -h

この-hオプションは、sort入力が人間が読める形式であることを示しますdu -h

この機能2009年8月GNUコアユーティリティ7.5に追加されました

メモ:

以前のバージョンのMac OSXを使用している場合は、coreutilsをインストールしてbrew install coreutilsから。gsortsort

最新バージョンのmacOS(Mojaveで検証済み)はデフォルトでサポートされてsort -hいます。

答え2

人間が読めるチャンクを使用する代わりに、-kフラグを使用して1Kチャンクを計算します。その後、簡単に数字で並べ替えることができる共通の単位があります。

du -ck | sort -n

明示的に人間単位を要求しませんが、そうすればできる方法はたくさんあります。多くの人が上記の1Kブロック技術を使用してからduを2番目に呼び出すようです。

https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size

追加された KB 単位を表示するには、次を使用します。

du -k | sed -e 's_^\([0-9]*\)_\1 KB_' | sort -n

答え3

持っていない場合GNU coreutilsの最新バージョン、ソート可能な出力を取得し、いくつかの後処理を介して人間に優しい出力を生成するためにduなしで呼び出すことができます。これは、バージョンに対応するフラグがなくても-h機能するという利点があります。du-h

du -k | sort -n | awk '
    function human(x) {
        if (x<1000) {return x} else {x/=1024}
        s="kMGTEPZY";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {gsub(/^[0-9]+/, human($1)); print}'

SIサフィックスが必要な場合(つまり、1024ではなく1000の倍数)、whileループ本文で1024を1000に変更します。 (条件の1000は意図的なものなので、たとえば代わり​​に取得します1M1000k

duサイズをバイト単位で表示するオプションがある場合(-bたとえば-B 1、ディスク使用量ではなく実際のファイルサイズを計算する副作用がある可能性がある場合)、先頭(たとえばss=" kMGTEPYZ";またはif (x<1000) {return x} else {x/=1024}先頭にスペースを追加してください。機能を追加しますhuman

1〜10の範囲の数字の小数点以下の桁数を表示することは、読者の練習問題のままです。

答え4

OS Xでは、次の方法で必要なcoreutilsをインストールできます。自分で作った:

brew install coreutils

gsortこれにより、何よりも-hコマンドライン引数が得られます。

関連情報