Guten Abend,
ich möchte gerne ein Skript in Perl basteln, welches anhand einer übergebenen Liste an Dateiendungen bestimmt, wieviele MByte in einem Verzeichnis durch Dateien mit dieser Endung belegt werden (inklusive Unterverzeichnisse).
Ich werde viele Probleme haben, dieses Skript zu erstellen :)
Aber eines, das mir am schwersten zu lösen scheint, ist das Größen-Problem.
Alternativ könnte ich mir vorstellen, einen String, wie er aus "ls -laR" entsteht, zu zerteilen, aber mir ist nicht klar, wie ich das mache, dass am ende nur die Dateigröße übrigbleibt. Mit awk ist das ja nicht so schwer, aber wie macht man das in Perl?
Ich bin für jede Hilfe dankbar!
Gruß,
Ralf
Perl und Dateigröße ermitteln
Perl und Dateigröße ermitteln
apt-get moo
wer denkt sich soetwas aus?
wer denkt sich soetwas aus?
Hallo,
das mit du ist schon klar. Nur möchte ich ja die Dateitypen und deren Platzverbrauch mit aufgelistet haben. Also in etwa:
Zip: 12345 Mbyte
Mp3: 5 MByte
etc.
das geht mit awk ja ganz gut, wenn man
benutzt, um z.B. den Speicherverbrauch von zip-Dateien zu ermitteln.
Nun hätte ich das aber ganz gerne etwas modularer, mit unterschiedlichen Dateitypen etc.
Gruß,
Ralf
das mit du ist schon klar. Nur möchte ich ja die Dateitypen und deren Platzverbrauch mit aufgelistet haben. Also in etwa:
Zip: 12345 Mbyte
Mp3: 5 MByte
etc.
das geht mit awk ja ganz gut, wenn man
Code: Alles auswählen
ls -alkR | awk '/^-.*\.[zZ][iI][pP]$/ {zip+=$5} END {printf "zip: %.0f Mbyte\n",zip/1024}'
Nun hätte ich das aber ganz gerne etwas modularer, mit unterschiedlichen Dateitypen etc.
Gruß,
Ralf
apt-get moo
wer denkt sich soetwas aus?
wer denkt sich soetwas aus?
- jack herer
- Beiträge: 94
- Registriert: 28.07.2003 19:48:17
Hallo,
in Perl gibts den Operator -s für Dateigrößen, also z.B.:
in Perl gibts den Operator -s für Dateigrößen, also z.B.:
Code: Alles auswählen
my @file_list = qw(a.txt b.txt c.txt);
my $size = 0;
foreach my $file (@file_list)
{
$size += -s $file;
}
print "Total Size: $size\n";
- jack herer
- Beiträge: 94
- Registriert: 28.07.2003 19:48:17
Zwar nicht besonders schön, funktioniert aber (für das aktuelle Verzeichnis)
Code: Alles auswählen
#!/usr/bin/perl -w
use IO::Dir;
use strict;
my $dir_name = $ENV{PWD};
my %dir_sizes;
my $dir = IO::Dir->new( $dir_name );
while (defined($_ = $dir->read))
{
my $size = -s $_;
next unless -f $_;
if( $_ =~ /\.([^.]*)$/ )
{
$dir_sizes{$1} += $size;
}
else
{
$dir_sizes{WO_EXT} += $size;
}
}
my $total_count = 0;
foreach my $key ( sort keys %dir_sizes )
{
$total_count += $dir_sizes{$key};
my ( $size, $extensions ) = getSize( $dir_sizes{$key} );
print "$key $size $extensions\n";
}
my ( $size, $extensions ) = getSize( $total_count );
print "--------------------\nTOTAL: $size $extensions\n";
sub getSize
{
my $size = shift(@_);
my @extensions = qw(B KB MB GB);
my $counter = 0;
while( $size > 1024 )
{
$size /= 1024;
$counter++;
}
return( $size, $extensions[$counter] );
}