Я часто работаю с коробками Unix, у которых нет флага -h для du.
Я ищу однострочник для преобразования КБ в удобочитаемый для человека. 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]);'