• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

sizelist - das AT Tool ;-)

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Für einen anderen Thread habe ich ein kleines Tool geschrieben. Ich habe es jetzt etwas erweitert und lasse es hier zu "eigenen" Ehren kommen ;-)

Ich habe den Thread "Das AT Tool" genannt, weil es hier entstanden ist und hier auch weitergeführt werden kann, wenn Bedarf besteht.

Code:
#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long;
use Pod::Usage;

###### POD #################################################################{{{

=head1 NAME

sizelist  -  list sizes of directories

=head1 SYNOPSIS

B<sizelist> [B<--maxdepth> n] [B<--minsize> n] [path...]

=head1 DESCRIPTION

B<sizelist> will traverse the path and count the sizes of all files and summing
them up. The sum will reported as the directory's size.

=head1 OPTIONS

=over 5

=item B<--maxdepth>

Depth up to which data is reported

=item B<--minsize>

Minimal size to report

=back

=head1 LEGAL

(C) 2007 by Skeeve  (mailto: sizelist.question.skeeve et xoxy.net)

This script is under GPL.
	
Use it at your own risk

=cut

###### END: POD ############################################################}}}

##### commandline option variables #########################################{{{
my (
	$verbose,
	$depth,
	$minsize,
);
##### end commandline option variables #####################################}}}

##### commandline options ##################################################{{{
# defaults
$minsize= 0;
&help unless GetOptions(
	"verbose|v!"	    => \$verbose,
	"help|h"		    => \&help,
	"man"			    => \&man,
	"maxdepth=i"        => \$depth,
	"minsize=i"         => \$minsize,
);
sub help { exit pod2usage( verbose => 1 ); };
sub man { exit pod2usage( verbose => 2 ); };
##### end commandline options ##############################################}}}

my @path= @ARGV;
$path[0]= '.' unless scalar @path;

foreach (@path) {
	sizeinfo($_, $depth, $minsize);
}

sub sizeinfo {
	my($path, $maxdepth, $minsize)= @_;
	my $this_dir;
	if (not opendir $this_dir,$path) {
		warn "?\t$path\t$!\n";
		return 0;
	}
	my $sum= 0;
	foreach (readdir $this_dir) {
		lstat  "$path/$_";
		if ( -f _ ) {
			$sum+= -s _ ;
		}
		elsif ( -d _ ) {
			next if /^\.\.?$/;
			$sum+= sizeinfo("$path/$_", (defined($maxdepth) ? $maxdepth - 1 : undef), $minsize);
		}
	}
	closedir $this_dir;
	print "$sum\t$path\n" if $sum >= $minsize and (not defined($maxdepth) or $maxdepth>0);
	return $sum;
}

Auf Wunsch hir noch kurz auf Deutsch beschrieben, was es macht:

Mit sizelist kann man sich einen Überblick über die Größe von Vereichnissen verschaffen. Dabei kann man festlegen, bis zu welcher Tiefe man Informationen benötigt (--maxdepth) und was die Minimalgrößen sind, die man zu sehen bekommen möchte (--minsize).

Anwendungsbeispiele:
  • Wie groß sind die Anwendungen?
    sizelist --maxdepth 2 /Applications
  • Und das dann noch sortiert nach größe (dazu nimmt man sort)
    sizelist --maxdepth 2 /Applications | sort -n
  • Wie groß sind alle meine Verzeichnisse, die größer sind als 512.000.000 Byte?
    sizelist --minsize ~
 
Zuletzt bearbeitet:
Könnte man in Erfahrung bringen welche Aufgabe das Tool erfüllt? "sizelist" ist ja etwas pauschal ausgedrückt…

;)

ps.: Ahja, What Size ist der GUI-Brother. :)
 
Könnte man in Erfahrung bringen welche Aufgabe das Tool erfüllt? "sizelist" ist ja etwas pauschal ausgedrückt…

;)

ps.: Ahja, What Size ist der GUI-Brother. :)

dito ;-) Und das ganze bitte noch auf Deutsch :-D
dankeschön!

edit: achso, jetzt hab ichs auch kapiert, ich hätte mal auf den Link klicken sollem Oo
 
Vielen Dank Skeeve.
Sehr interessant und gut, um sich in die Materie einzuarbeiten. Wird sofort heute abend durchgekaut.

Gruss
Andreas
 
Naja... Eindeutschen werde ich diese minimal-manpage sicherlich nicht. Im Terminal ist eh nix auf Deutsch.

@jensche: Sicherlich ist Mac Ottonormaluser kein Terminalfan. Aber für den ist es auch weniger gedacht. Es gibt ja haufenweise Tools, die Dir die Größen anzeigen. Soger schön bunt als Bildchen. Aber wie Du im anderen Thread vielleicht gesehen hast, haben die dort nicht so richtig weitergeholfen. Da ging es dann auch ganz rasch ins Terminal.

Zudem ist ein Zweck auch (siehe CRime und space im anderen Thread) ein bißchen was über Scripterstellung zu lernen. Also: Falls Fragen zur Arbeitsweise des Scripts aufkommen: Einfach hier posten.
 
das ist ja auch gut so. ich habe auch übersehen das das ja im Terminal Bereich ist... ;-)

Aber ich finde es gut. somit kann man langsam begreifen wie Unix funktioniert. und was es macht.
 
Es mag ja Spaß machen, mal wieder nen Script zu schreiben, aber wozu das hier?

Mit DU kann man einiges.
Code:
du -sh /Applications

Oder eine sortierte Liste in MegaByte:
Code:
du -sm /Applications/* | sort -n
 
Und was zeigt der Finder an dem Script des Threadstarters nicht an?
 
Ich gebe zu, obwohl ich durchaus mit Terminal umzugehen weiß, liegt mir WhatSize eher.. ;)
Aber trotzdem Danke, Skeeve!
 
Vielen Dank Skeeve! :)

Jetzt muss ich mich da nur noch durchkauen 8-)

Ich finde übrigens, dass es ein wirklich praktisches Tool ist. Werde ich bestimmt öfter nutzen.
Und um noch mal auf What Size zurückzukommen. Wenn schon, dann bitte Disk Inventory X , denn What Size zeigt nicht alle Daten an.

Abgesehen mal von dem GUI verwöhnten Auge, welches sich mit Disk Inventory X ein sehr schönes "Bild" von den Daten und ihrer Größe machen kann, habe ich hier ein Tool, welches ungleich schneller arbeitet und dabei durch die nützlichen Parameter die Suche auf das "Wesentliche" beschränken kann. Super!

Und zu "du": Damit zeigt man doch Verzeichnisse an … :-/

Gruss
 
Nun, "du" ist etwas allgemeiner. Manpagetitel: "du -- display disk usage statistics"

Dateiengrößen anzeigen, Ordnergrößen aufsummieren, Tiefe bestimmen, entscheiden, ob symbolischen Links gefolgt werden soll oder nicht (Was nen kolossalen Unterschied ausmachen kann), Größen in KiloByte, MegaByte oder automatisch ausgewählt anzeigen lassen, Dateien/Ordner, die einem bestimmten Muster entsprechen, auslassen, und, und, und...

@Space: Du meinst "ls". Damit zeigt man tatsächlich Verzeichnisse an, ja...
 
Es mag ja Spaß machen, mal wieder nen Script zu schreiben, aber wozu das hier?
Weil ich bei "du" dann weiß, wie groß die Verzeichnisse sind, nicht aber, wie groß die darunter sind. Mag sein, daß "du" das kann. Da ich das nicht weiß und kein Interesse hatte, das nachzusehen und außerdem weiß, wie ich das ganze in perl schreiben kann, habe ich es gemacht. Du kennst den Spruch? "Für einen Mann mit Hammer sieht alles wie ein Nagel aus." Mein Hammer ist perl...
 
Das mit dem Hammer kenn ich zu gut... ;)

Also nichts für ungut mit dem "du". Wollte an sich nur erwähnen, dass es sowas gibt und mich gleichzeitig erkundigen ob Dein Script etwas kann, was "du" nicht kann, um dazuzulernen, falls ich hier etwas übersehen habe.
 
mich gleichzeitig erkundigen ob Dein Script etwas kann, was "du" nicht kann, um dazuzulernen, falls ich hier etwas übersehen habe.
Klar: Es ist erweiterbar ;-) KB,MB, GB, TB einbauen -> Sollte leicht sein.
Auf Blockgrößen aufrunden -> Sollte auch möglich sein.
Was auch immer man integrieren mag: Mit Perl ist das alles relativ einfach.
 
Hm... Ruby rockt da mehr, finde ich. Hab beim Zivildienst mal mehrere Scripte in beiden Sprachen implementiert und die Rubyscripte waren jeweils kürzer, leichter verständlich und "direkter".
Die Sprache steht einem einfach weniger im Weg herum als Perl.
 
Deine Meinung ;-) Wie lang ist so ein Zuvieldienst? 10? 15 Monate? Toll ;-) Meine Erfahrung mit Perl reicht mehr als 12 Jahre zurück. Du kannst mir also glauben, wenn ich sage: Mir steht Perl nicht im mindesten im Weg herum.
 
So ein Zivildienst ist neun Monate lang und ich habe von dem Mist kaum die Hälfte herum.
Aber Zivildienst != Programmiererfahrung.

Außerdem kann man das Im-Weg-Stehen einer Sprache nicht an der Codeschreib-Leichtigkeit eines erfahrenen Programmierers messen (Stell Dir vor, man fand es mal normal, Autos mit einer Kurbel anzulassen und Leute die dran gewöhnt waren, hatten nicht das Bestreben, den E-Starter zu erfinden!), sondern viel mehr an dem Denkaufwand, den man hat, wenn sich irgendwo "tief unten" in der Programmlogik etwas ändern muss.