Este script perl irá imprimir exatamente o que você precisa, ele está usando File::Find
para percorrer recursivamente.
Eu usei -f
para garantir que apenas os arquivos sejam colocados no hash
O hash %files
tem filepath
como chave e size
como seu valor. Em seguida, classificou-o com base em valores e imprimiu os 10 melhores resultados
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my %files;
my $counter=0;
find( \&wanted, '<target directory>');
for my $file ( sort {$files{$b} <=> $files{$a}} keys%files){
print "$file : $files{$file}\n";
$counter++;
if ($counter == 10){
last;
}
}
sub wanted {
$files{"$File::Find::name"}=-s $File::Find::name if -f;
return;
}
Ou simplesmente usando uma matriz para fazê-lo funcionar
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my @files;
my $counter=0;
find( \&wanted, '<target directory>');
for my $file ( sort { -s $b <=> -s $a} @files){
my $size = -s $file;
print "$file : $size\n"
$counter++;
if ($counter == 10){
last;
}
sub wanted{
push @files,$File::Find::name if -f;
return;
}