
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
から。gsort
sort
最新バージョンの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は意図的なものなので、たとえば代わりに取得します1M
。1000k
)
du
サイズをバイト単位で表示するオプションがある場合(-b
たとえば-B 1
、ディスク使用量ではなく実際のファイルサイズを計算する副作用がある可能性がある場合)、先頭(たとえばs
)s=" kMGTEPYZ";
またはif (x<1000) {return x} else {x/=1024}
先頭にスペースを追加してください。機能を追加しますhuman
。
1〜10の範囲の数字の小数点以下の桁数を表示することは、読者の練習問題のままです。
答え4
OS Xでは、次の方法で必要なcoreutilsをインストールできます。自分で作った:
brew install coreutils
gsort
これにより、何よりも-h
コマンドライン引数が得られます。