- 論壇徽章:
- 0
|
Shell的魅力
find $dir -type d -print | du
這樣用管道是無效的,因為du不能從stdio讀取輸入。
find $dir -type d -print | xargs du
也是不行的,因為du本身就統(tǒng)計子目錄,這樣會重復(fù)輸出。
還是直接用du正確:
du $dir
du可以用-k參數(shù)指定單位為kB,這樣就不用除以2了。
另外sed的第一個-e中的源串有些羅嗦了,可以簡化一下。
我改進了這個腳本,而且可以支持du參數(shù)選項:
#!/bin/sh
# dulist.sh
dir=.
if [ $# -gt 0 ]; then
dir=$1
shift
fi
(cd $dir;pwd)
du -k $* $dir | awk '{print $2, "== ("$1" kB)"}' | sort -f | sed -e "s,\([^/]*\) ==,|--\1," -e "s,[^/]*/,| ,g"
用法舉例:
dulist.sh #統(tǒng)計當(dāng)前目錄
dulist.sh try #統(tǒng)計try目錄
dulist.sh try -a #統(tǒng)計try目錄,包括其中的文件
dulist.sh try -ao #統(tǒng)計try目錄,父目錄size不包括子目錄size
dulist.sh link2try #只統(tǒng)計link本身
dulist.sh link2try -L #統(tǒng)計link所指向的try目錄 |
|