我曾经有过这个甜蜜的别名,我称之为dusort,它会打印出一个人类可读的顶级子目录大小列表+按大小排序的文件。它就像是在终端中运行的mac迷你文件灯。
但是现在我的别名在我将其复制到运行Mac OS 10.6的新Mac后被破坏了。显然我使用的那种来自fink(我试图避免在我的新Mac上重新安装)或者10.6的运输功能比10.4运输的功能少(远不太可能。)
这是旧的别名,有点kludgy因为它必须运行du两次以获得机器可读和人类可读的文件大小(我实际上已将其保存为带有#!/的〜/ bin中的脚本bin / bash但这应该不重要): sort -n +1<(paste<(du -hd1 | cut -f1)<(du -d1))| cut -f1,3
任何想法: A.让它再次运作? B.使用bash魔法使这个命令更优雅?
我知道我可以通过将du输出复制到临时文件或者fifo或者一些这样的废话来解决这个问题,但这太荒谬了。我决定来这里寻求帮助,以克服我的kashdgy bash习惯。请指教。 :)
编辑:
现在我考虑一下,这有效:
sort <(paste <(du -d1|cut -f1) <(du -hd1))|cut -f2,3
尽管如此,看起来像是一个巨大的kludge,特别是两次调用du,这可能会在一个大文件树上产生5分钟到10分钟之间的差异......有任何关于清理它的建议吗?
答案 0 :(得分: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
}
'\'''
如果你有任何太字节文件,你需要扩展它......
答案 1 :(得分:-1)
alias dsize='for dir in *; do du -skh $dir; done | sort -n'
给出这样的输出(其中数据, img 和 util 是目录):
$ dsize
1.9G data
4.0K getLinkMentionCounts.bash
4.0K img
28K util