[Moscow.pm] Get human-readable output from du, sorted by size:

Nikolay Mishin mi на ya.ru
Ср Сен 28 02:59:34 PDT 2011


Хорошо, вернем понятливость и
#!/bin/sh
du -h |perl -e '%byte_order = ( T => -4, G => -3, M => -2, K => -1, k => -1 ); print map { $_->[0] } sort { $byte_order{$a->[1]} <=> $byte_order{$b->[1]} || $b->[2] <=> $a->[2] } map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>' $*

представим, как
#!/bin/sh
du -h |perl -e '
%byte_order = ( T => -4, G => -3, M => -2, K => -1, k => -1 ); #хэш приоритетов , где T(терабайты)>G>M>K
print map { $_->[0] } sort {                                                     #применяем Schwartzian Transform (http://en.wikipedia.org/wiki/Schwartzian_transform)
         $byte_order{ $a->[1] } <=> $byte_order{ $b->[1] }       #в начале сортируем по рипоритету G>K гигабайт больше килобайта
      || $b->[2] <=> $a->[2]                                                       #потом сортируем по цифровому значению
  } map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>                               #функцией map и регулярным выражением
                                                                                              #вытаскиеваем значения из строки вида:
                                                                                              # 150G   ./xml
                                                                                              # 100M   ./tmp
                                                                                              # 10K     ./test
' $*                                                                                         #входные параметры скрипта передаем на вход этой конструкции

28.09.2011, 13:23, "Nikita Zubkov" <nikzubkov на gmail.com>:
> А может стоит развернутее и с комментариями? Это уже сложно поддерживать.
>
> 28 сентября 2011 г. 13:12 пользователь Nikolay Mishin <mi на ya.ru> написал:
>
>>  Добрый день Moscow-pm
>>
>>  пока получается так
>>  cat du-s
>>  #!/bin/sh
>>  du -h |perl -e '%bo = ( T => -4, G => -3, M => -2, K => -1, k => -1 ); print
>>  map { $_->[0] } sort { $bo{$a->[1]} <=> $bo{$b->[1]} || $b->[2] <=> $a->[2]
>>  } map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>' $*
>>
>>  Вопрос - а можно короче или оптимальнеею
>>  спасибо.
>>
>>  С Уважением Николай Мишин
>>  --
>>  Moscow.pm mailing list
>>  moscow-pm на pm.org | http://moscow.pm.org
> --
> С уважением,
> Никита Зубков
> тел: +7 (915) 082-76-80
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

--
Nikolay Mishin


Подробная информация о списке рассылки Moscow-pm