Please post any improvements. Thanks!#!/usr/bin/perl -w use strict; my %byFile; sub sortBySize { my $a_units = $byFile{$a} || 'x'; my $b_units = $byFile{$b} || 'x'; my $a_value = $byFile{$a}; my $b_value = $byFile{$b}; $a_units =~ s/\d+[\.\d+]+([k|kB|MB|GB])/$1/g; $b_units =~ s/\d+[\.\d+]+([k|kB|MB|GB])/$1/g; $a_value =~ s/$a_units//g; $b_value =~ s/$b_units//g; if ( $a_units eq $b_units ) { my $v = $a_value <=> $b_value; return $v; } elsif ( ($a_units eq "k" or $a_units eq "kB") and ($b_units +eq "k" or $b_units eq "kB") ) { my $v = $a_value <=> $b_value; return $v; } elsif ( $a_units eq "GB" ) { return 1; } elsif ( $b_units eq "GB" ) { return -1; } elsif ( $a_units eq "MB" ) { return 1; } elsif ( $b_units eq "MB" ) { return -1; } elsif ( $a_units eq "kB" or $a_units eq "k" ) { return 1; } elsif ( $b_units eq "kB" or $a_units eq "k" ) { return -1; } else { return 0; } } open ( DUSH, "du -sH *|") or die __FILE__ . "[" . __LINE__ . "] Can't +execute du -SH *:$!\n"; for (<DUSH>) { my ( $size, $name ) = split /\s+/; $byFile{$name} = $size; } for ( reverse sort sortBySize keys %byFile ) { print "$_\t=>$byFile{$_}\n"; }
| Plankton: 1% Evil, 99% Hot Gas. |
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: sort du -sH output to find that disk hog
by Aristotle (Chancellor) on Aug 04, 2004 at 21:57 UTC | |
|
Re: sort du -sH output to find that disk hog
by eserte (Deacon) on Aug 04, 2004 at 22:25 UTC | |
|
Re: sort du -sH output to find that disk hog
by etcshadow (Priest) on Aug 05, 2004 at 01:05 UTC | |
by Anonymous Monk on Aug 10, 2004 at 13:09 UTC | |
|
Re: sort du -sH output to find that disk hog
by Anonymous Monk on Aug 04, 2004 at 21:09 UTC | |
by Plankton (Vicar) on Aug 04, 2004 at 21:51 UTC |