- 论坛徽章:
- 0
|
Shell的魅力
find $dir -type d -print | du
这样用管道是无效的,因为du不能从stdio读取输入。
find $dir -type d -print | xargs du
也是不行的,因为du本身就统计子目录,这样会重复输出。
还是直接用du正确:
du $dir
du可以用-k参数指定单位为kB,这样就不用除以2了。
另外sed的第一个-e中的源串有些罗嗦了,可以简化一下。
我改进了这个脚本,而且可以支持du参数选项:
#!/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 #统计当前目录
dulist.sh try #统计try目录
dulist.sh try -a #统计try目录,包括其中的文件
dulist.sh try -ao #统计try目录,父目录size不包括子目录size
dulist.sh link2try #只统计link本身
dulist.sh link2try -L #统计link所指向的try目录 |
|