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:

ZENcom

Goldener Apfel der Eris
Registriert
30.03.06
Beiträge
2.600
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. :)
 

unknown7

Kaiserapfel
Registriert
28.01.07
Beiträge
1.716
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
 

CRiMe

Englischer Kantapfel
Registriert
07.12.06
Beiträge
1.072
Vielen Dank Skeeve.
Sehr interessant und gut, um sich in die Materie einzuarbeiten. Wird sofort heute abend durchgekaut.

Gruss
Andreas
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

jensche

Korbinians Apfel
Registriert
27.10.04
Beiträge
6.948
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.
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
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
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Und was zeigt der Finder an dem Script des Threadstarters nicht an?
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
Ich gebe zu, obwohl ich durchaus mit Terminal umzugehen weiß, liegt mir WhatSize eher.. ;)
Aber trotzdem Danke, Skeeve!
 

space

Neuer Berner Rosenapfel
Registriert
02.12.05
Beiträge
1.949
Vielen Dank Skeeve! :)

Jetzt muss ich mich da nur noch durchkauen :cool:

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 … o_O

Gruss
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
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...
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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...
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
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.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
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.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
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.