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

Nikolay Mishin mi на ya.ru
Ср Сен 28 07:03:13 PDT 2011


в понятном виде так

perl -ne '
if (/^(\d+)\s+(.*$)/) {
    $l = log( $1 + .1 );
    $m = int( $l / log(1024) );
    printf(
        "%6.1f\t%s\t%25s  %s\n",
        ( $1 / ( 2**( 10 * $m ) ) ),
        ( ( "K", "M", "G", "T", "P" )[$m] ),
        "*" x ( 1.5 * $l ), $2
    );
}
'


28.09.2011, 18:01, "Nikolay Mishin" <mi на ya.ru>:
> для файлов, правда есть такой хак (Perl hack: To display large files :http://www.cyberciti.biz/faq/find-large-files-linux/)
>
>  du -k | sort -n | perl -ne 'if ( /^(\d+)\s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf  ("%6.1f\t%s\t%25s  %s\n",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'
>
> 28.09.2011, 17:59, "Nikolay Mishin" <mi на ya.ru>:
>
>>  есть еще вывод первых 10 больших файлов
>>   find . -type f | xargs ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head
>>  вот бы теперь сделать так, чтобы выводились и файлы и каталоги и они были отсортированы по размеру
>>  правда знака директории тоже бы не помешал (ну это доп задача..так сказать)
>>
>>  28.09.2011, 17:55, "Nikolay Mishin" <mi на ya.ru>:
>>>   нереально, спасибо, да, хорошее исправление, а то после запятой не сортировал, точнее брал для сортировки только целую часть
>>>
>>>   28.09.2011, 17:41, "Denis Evdokimov" <evdokimov.denis на gmail.com>:
>>>>    Николай, у вас небольшая неточность вот в этом месте
>>>>    map { [ $_, /([TMGKk])/, /(\d+)/ ] }
>>>>    стоит использовать
>>>>    map { [ $_, /([TMGKk])/, /(\d+(:?\.\d+)?)/ ] }
>>>>
>>>>    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+)/ ] } <>' | head | awk '{print $1}'
>>>>    48G
>>>>    22G
>>>>    21G
>>>>    12G
>>>>    11G
>>>>    9.7G
>>>>    8.1G
>>>>    8.1G
>>>>    8.6G
>>>>    8.4G
>>>>
>>>>    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+(:?\.\d+)?)/ ] } <>' | head | awk '{print $1}'
>>>>    48G
>>>>    22G
>>>>    21G
>>>>    12G
>>>>    11G
>>>>    9.7G
>>>>    8.6G
>>>>    8.4G
>>>>    8.1G
>>>>    8.1G
>>>>    P.S. Есть ещё несколько мыслей, напишу их позже, сейчас много работы.
>>>>
>>>>    --
>>>>    Moscow.pm mailing list
>>>>    moscow-pm на pm.org | http://moscow.pm.org
>>>   --
>>>   Nikolay Mishin
>>>
>>>   --
>>>   Moscow.pm mailing list
>>>   moscow-pm на pm.org | http://moscow.pm.org
>>  --
>>  Nikolay Mishin
>>
>>  --
>>  Moscow.pm mailing list
>>  moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Nikolay Mishin

--
Nikolay Mishin


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