這使用awk
爲排序鍵創建額外的列。它只調用du
一次。輸出應該與du
完全一樣。
我把它分成多行,但它可以重新組合成一行。
du -h |
awk '{printf "%s %08.2f\t%s\n",
index("KMG", substr($1, length($1))),
substr($1, 0, length($1)-1), $0}' |
sort -r | cut -f2,3
說明:
- BEGIN - 創建字符串索引來代替1,2,3爲K,M,G爲通過單位分組,如果沒有單元(尺寸小於1K),那麼就沒有匹配,並返回一個零(完美!)
- 打印新字段 - 單位,值(使alpha-sort正常工作,它是零填充,固定長度)和原始行
- 索引大小字段的最後一個字符
- 拉出大小
- 結果排序的數字部分,摒棄了多餘的列
嘗試沒有cut
命令,看看它在做什麼。
編輯:
下面是它執行AWK腳本中的排序,並且不需要削減版本:
du -h |
awk '{idx = sprintf("%s %08.2f %s",
index("KMG", substr($1, length($1))),
substr($1, 0, length($1)-1), $0);
lines[idx] = $0}
END {c = asorti(lines, sorted);
for (i = c; i >= 1; i--)
print lines[sorted[i]]}'
你試過用'du'? – 2011-03-06 20:53:29
@TomaszNurkiewicz是的(請參閱上面的腳本)。問題是'du'沒有對結果進行排序。 – Matti 2011-03-06 20:54:54
給定一個文件系統的隨機塊,是否有可能找到與之相關的文件名? (對於文件/目錄中的那些塊)。如果是這樣,這將是一個非常有效的方式來找到最大的文件。 (我很確定答案是否定的,我之前使用過Google搜索,但也許SO會找到一些東西。)依賴於文件系統? – 2012-01-08 15:13:12