Eli*_*iot 7 sorting bash command-line gnu-coreutils osx-snow-leopard
我曾经有一个名为 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 或类似的废话来解决此问题,但这变得很荒谬。我决定来这里寻求帮助,以改掉我笨拙的狂欢习惯。请指教。:)
编辑:
现在我想了一下,这是有效的:
sort <(paste <(du -d1|cut -f1) <(du -hd1))|cut -f2,3
Run Code Online (Sandbox Code Playgroud)
不过,这似乎是一个巨大的杂凑,尤其是调用 du 两次,这可能会导致大型文件树上的 5 分钟和 10 分钟之间的差异...有关清理它的建议吗?
我在 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
}
'
Run Code Online (Sandbox Code Playgroud)
或者要设置为别名,需要一些引用:
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
}
'\'''
Run Code Online (Sandbox Code Playgroud)
如果您有任何 TB 文件,则需要扩展它......
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |