#!/usr/bin/perl -w use File::Find qw/find/; use File::Spec; my @Files; my $total_size; find(\&wanted, File::Spec->curdir()); @Files = sort_size(@Files); my $limit = @ARGV ? $ARGV[0] : @Files; for (@Files[0..$limit-1]) { printf "%-60s : %d\n", $$_{-name}, $$_{-size} } print "Total size: $total_size\n"; sub wanted { my @stat = stat; #~ print STDERR "$File::Find::name\n" unless $stat[7]; return unless $stat[7]; my %file = ( -name => $File::Find::name, -size => $stat[7] ); $total_size+=$stat[7]; push @Files,\%file; return 1; } sub sort_size { my $desc = $_[0] ? shift : 0; shift unless $desc; my @array = @_; if ($desc) { @array = sort { $$b{-size} <=> $$a{-size} } @array; } else { @array = sort { $$a{-size} <=> $$b{-size} } @array; } return @array; }