#!/usr/bin/perl -w use strict; use File::Find; # startverzeichnis holen my $dir = shift() || '.'; print "Search in $dir...\n"; my $max = 8; # laenge des laengsten verzeichnisses # startverzeichnis oeffnen opendir(my$hDIR, $dir) or die "Can't open directory '$dir': $!"; # unterverzeichnisse einlesen my @content = grep { # vollstaendigen pfad besorgen my $f = "$dir/$_"; # auf verzeichnis pruefen ( . und .. auslassen ) if (-d $f && !/^\.\.?$/) { # max. laenge eventuell neu setzen $max = length($f) if length($f) > $max; 1 } } readdir($hDIR); # startverzeichnis schliessen closedir($hDIR); # durch die unterverzeichnisse iterieren foreach my$item (@content) { # variablen initialisieren my($path, $size, $files, $folders) = ("$dir\/$item", 0, 0, 0); # groesse, anzahl dateien und anzahl ordner ermitteln find(sub { -f && ++$files; -d && !/^\.\.?$/ && ++$folders; $size += -s }, $path); # groesse auf MB bringen $size /= 1024**2; # groesse in 2 stuecke aufteilen my $s1 = int($size); my $s2 = $size-$s1; if (length($s2) > 2) { substr($s2, 0, 2) = '' } else { $s2 = 0 } # ausgabe printf '%-'.$max.'s Size: %4d.%08.8sMb Files: %4d Folders: %4d %4s'."\n" => $path, $s1, $s2, $files, $folders, $size < 1 ? '<1MB' : ''; }