#!/usr/bin/perl -w
# tento scriptik nacita z /etc/passwd vsetkych uzivatelov a zisti kolko vyuzivaju miesta na disku. 
# priebezne sa robi vypis na STDOUT a nakoniec sa zapise TOP 10 do suboru "top"


open (DATA, "/etc/passwd")
	or die "nemozem citat z /etc/passwd";
open (OUT, ">top")
	or die "nemozem zapisovat do suboru top";

format STDOUT =
     @<<<<<<<<<<<<<<<<<       @###.####
     $login                   $counter
.

format OUT =
     @<<<<<<<<<<<<<<<<<       @###.####
     $key		      $users{$key}			
.

while ( $riadok = <DATA> ){ 
	$counter = 0;
	@user = split (/:/,$riadok);
	($login,$home) = ($user[0],$user[5]);
	if ($user[2]>=1000) {
		&duForUser($home);
		$users{$login}=($counter /= (1024*1024)); #v megach
		write(STDOUT);
	}
}


$counter = 0;
foreach $key (sort {$users{$b} <=> $users{$a}} keys %users ) {
	write(OUT);
}


sub duForUser {
	my ($adresar)= $_[0];
	my (@subory,$meno,$cesta);
	if (not opendir(ADR,$adresar)) {
	  #  print STDERR "neda sa otvorit $adresar \n";
	}else {
	@subory = readdir(ADR);
	closedir(ADR);

	foreach	$meno ( @subory ) {
		if ( $meno =~ /^\./ ) {next;} #konfiguracne subory neratam :)
		$cesta = $adresar ."/".$meno;
		if ( -d $cesta ) {
		   &duForUser($cesta);
		}else { 
		     @pom = stat($cesta);  
		     if ($pom[7]) {
			$counter += $pom[7];
		     }
		}
	}}
}
