我经常在没有 du 的 -h 标志的 unix 机器上工作。
我正在寻找一种将 KB 转换为人类可读的单行器。Perl 似乎是一个不错的选择。
这就是我到目前为止所拥有的。
@a=split /\s+/;
$x=$_!=0?int(log()/log(1024)):0;
@b=('K','M','G');
printf("%.3s%s\t%s\n",$_/(1024)**$x,$b[$x],$a[1]);
像这样运行:
du -ks * | perl -lne '@a=split /\s+/;$x=$_!=0?int(log()/log(1024)):0;@b=('K','M','G');printf("%.3s%s\t%s\n",$_/(1024)**$x,$b[$x],$a[1]);'
它不能完美地工作,因为我无法找到正确的 printf 格式。
使用 perl 以及 awk/sed 等的单行代码将是最有用的。
这就是 du -h 的样子。最多 1 个小数。最小值:0 位小数。带四舍五入。
8.0K
1.7M
4.0M
5.7M
88K
更新:
du -ks * | perl -lane '$F[0];$x=$_!=?int(log()/log(1024)):0;printf("%.3s%s\t%s\n",$_/1024**$x,qw<K M G>[$x],$F[1]);'