我們知道,在Linux下,如果你想知道當前目錄下,每個文件或子目錄的尺寸,你可以使用du命令來完成這一動作。如:
$ du -sh *
這個命令可以以K,M,G的方式顯示每個文件和子目錄的大小。我們把這種方式叫做,human-readable,也就是可以讓人讀的方式,如下所示:
8.4G Desktop
2.6G Documents
12K keys
12M Pictures
536K scripts
但是,很可惜的是,我們的du並沒有提供相關的排序功能,所以,如果在human-readable下,也就是-h參數下,我們很難使用sort命令來排序。因為那變成了字符串排序,小數點,數字的位數,還有單位K,M,G都會讓排序變得混亂。那麼,我們如何才能即有human-readble這種功能,還能有排序呢。我們得借用一些腳本語言來處理了。
下面是使用了Perl來達到這一功能:
du -sk * | sort -n | #以 K 字節的方式排序
perl -ne ' #使用Perl來處理 K M 和 G 單位
($s,$f)=split(m{\t}); #把 尺寸/文件名 分開
for (qw(K M G)) { #以尺寸單位循環
if($s<1024) { #如果 尺寸<1024 那麼就輸出
printf("%.1f",$s); #顯示文件尺寸
print "$_\t$f"; #顯示文件名
last #換行
};
$s=$s/1024 #除1024然後進入下一個尺寸單位
}