[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