2010-08-23 42 views
4

我曾經擁有這個叫做dusort的甜蜜別名,它會打印出大小可讀的頂級子目錄+大小排序的文件。它就像是一個在終端中運行的mac的迷你filelight。在Mac OS 10.6上獲得排序的,可讀的du輸出的最有效方法是什麼?

但現在我的別名在我將其複製到運行Mac OS 10.6的新Mac上之後破壞了。顯然,我使用的排序來自fink(我試圖避免在我的新Mac上重新安裝),或者與10.6一起發貨的那個具有比10.4發貨更少的功能(遠不太可能)。

Here是舊的別名有點kludgy,因爲它必須運行du兩次,以獲得機器可讀和人類可讀的文件大小(我實際上已經把它作爲〜/ bin中的腳本保存爲#!/ bin/bash,但是這不應該的問題): 排序-n +1 <(粘貼<(杜-hd1 |切-f1)<(杜-d1))|削減-f1,3

任何想法: A.再次運作? B.使這個命令使用bash巫術更優雅?

我知道我可以通過將du輸出複製到臨時文件或fifo或一些這樣的廢話來解決這個問題,但這太荒謬了。我決定來這裏尋求幫助,以踢出我頑皮的打擊習慣。請指教。 :)

編輯:

現在想起來,這個工程:

sort <(paste <(du -d1|cut -f1) <(du -hd1))|cut -f2,3 

不過,看起來像一個巨大的雜牌組裝電腦,尤其是呼籲杜兩次這可能使得5分鐘,之間的區別10分鐘,在一個大型的文件樹...任何清理它的建議?

回答

1

我用這個在Red Hat Linux,也許它也將在BSD?:工作

du -sk * | sort -n | awk ' 
{ if ($1 < 1024) { output("K", 1) } 
    else if ($1 < 1048576) { output("M", 1024) } 
    else { output("G", 1048576) } 
} 

function output(size, div) 
{ 
    printf "%d%s\t%s\n", ($1/div), size, $2 
} 
' 

或設立爲一個別名一些需要報價:

alias dusort='du -sk * | sort -n | awk '\'' 
{ if ($1 < 1024) { output("K", 1) } 
    else if ($1 < 1048576) { output("M", 1024) } 
    else { output("G", 1048576) } 
} 
function output(size, div) 
{ 
    printf "%d%s\t%s\n", ($1/div), size, $2 
} 
'\''' 

如果你有你需要擴展它的任何TB文件...

+0

有趣......當我開始對這個幾年前,我試圖AWK第一這樣做,但放棄了。 我想知道你的腳本爲什麼給出與我的大小大不相同的尺寸?參見: dusort bash返回 7.4G \t。 dusort awk返回14.8G \t。 這件事不會讓我增加適當的間距,所以我拿出了大部分上面的列表。 – Eliot 2010-08-23 10:21:49

+1

可能因爲MacOSX上的塊大小爲512字節。我已經添加了-k來解決這個問題。 – danio 2010-08-23 11:42:46

-1
alias dsize='for dir in *; do du -skh $dir; done | sort -n' 

給出像這樣的輸出(其中數據IMGUTIL是目錄):

$ dsize 
1.9G  data 
4.0K  getLinkMentionCounts.bash 
4.0K  img 
28K  util 
+0

不幸的是,這並不按絕對文件大小排序。 – Eliot 2012-07-01 19:21:24

+0

艾略特,好點...取出-h所以文件大小以字節爲單位。 – DrSkippy 2012-07-11 19:47:22

+0

但它不是人類可讀的,這是整個點:) – Eliot 2012-07-13 18:49:17

相關問題