4

我曾经有一个 du 的可爱别名,我称之为 dusort,它会为顶级子目录+按大小排序的文件打印出人类可读的大小列表。它就像一个在终端中运行的 mac 迷你文件灯。

但是现在我的别名在我将它复制到运行 Mac OS 10.6 的新 mac 后被破坏了。显然,我使用的那种要么来自 fink(我试图避免在我的新 Mac 上重新安装),要么 10.6 的功能比 10.4 的功能少(可能性要小得多。)

这是一个有点笨拙的旧别名,因为它必须运行 du 两次才能获得机器可读和人类可读的文件大小(我实际上已将其保存为 ~/bin 中的脚本,带有 #!/bin/bash但这不重要): sort -n +1 <(paste <(du -hd1|cut -f1) <(du -d1))|cut -f1,3

任何想法: A. 让它再次工作?B. 使用 bash 魔法使这个命令更优雅?

我知道我可以通过将 du 输出复制到临时文件或 fifo 或一些类似的废话来解决这个问题,但这越来越荒谬了。我决定来这里寻求帮助,以摆脱我笨拙的 bash 习惯。请指教。:)

编辑:

现在我想起来了,这行得通:

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

仍然,似乎是一个巨大的kludge,尤其是调用 du 两次,这可能会在大型文件树上产生 5 分钟和 10 分钟之间的差异......关于清理它的任何建议?

4

2 回答 2

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 文件,则需要对其进行扩展...

于 2010-08-23T10:07:57.963 回答
-1
alias dsize='for dir in *; do du -skh $dir; done | sort -n'

给出这样的输出(其中dataimgutil是目录):

$ dsize
1.9G     data
4.0K     getLinkMentionCounts.bash
4.0K     img
28K      util
于 2012-06-26T19:14:26.740 回答