perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 34
Click for quality!




08.02.2012 / 22:46

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragVerzeichnisssuche mit einem Perlscript
Seitenanfang
Hallo Leute,

ich habe folgendes Problem, ich möchte mit einem Skript nach Verzeichnissen suchen die entweder leer oder > 1MB sind.

Quasi so:
#perl search_empty.pl C:\test\

Ausgabe soll so aussehen:
C:\>perl dirzeigen.pl c:\test
aaa Size: 4.828253Mb, Files: 4, folders: 0
bbb Size: 4.828253Mb, Files: 4, folders: 0
ccc Size: 4.828253Mb, Files: 4, folders: 0
ddd Size: 4.828253Mb, Files: 4, folders: 0

so das ich mir dann nur noch >1 MB ausgeben lassen kann um diese zu entfernen.

Ich habe mir hierzu was zusammen gebastelt, aber ich komme leider nicht auf die gewünschte Ausgabe. (Eigentlich nur fehler meldungen :))

#!/usr/bin//perl -w
use WIN32::Console;
use strict;
use warnings;
use File::Find::Rule ();

die 'usage: search_empty.pl *directory*'
unless 1 == @ARGV;

my @array = `dir /A:D /B @ARGV`;
for(my $i=0;$i<@array;$i++){
#print "$array[$i]";
my( $size, $files, $folders );
my $rule = File::Find::Rule-> start( @ARGV );

while( my $item= $rule->match )
{
next if $ARGV[0] eq $item;
$size+= -s $item;
-f $item and $files++;
-d $item and $folders++;
}

printf "$Size: %fMb , Files: %d, folders: %d\n"
=> $size / 1024**2, $files, $folders;
}

meine Idee war es denn $array mit dem unterverzeichnis einfach ans "@ARGV" zuhängen,
so das im @ARGV&$array --> c:\test\aaa steht und das dann in der schleife abgearbeitet wird.
Leider Kollediert meine Denkweise etwas mit Perl.

Datum: 12.05.2007-13:16

Beitragre: Verzeichnisssuche mit einem Perlscript
Seitenanfang
Ich wuerde das Problem mit einer rekursiven Funktion angehen die in die Verzeichnistiefen eintaucht

Code im Folgeposting

Datum: 25.05.2007-16:07

Beitragre: Verzeichnisssuche mit einem Perlscript
Seitenanfang
Muss Code in zwei Teilen posten, hab Probleme beim Upload


#!/usr/bin/perl

# TODO:
# - check if directory is readable before opendir()
# -

use strict;
use warnings;

use File::Spec;
use Getopt::Long;

my %opts = (
'check-sym-links' => 0,

);

sub dir_stat($);

GetOptions(\%opts, 'check-sym-links');

unless(@ARGV) {
print_usage();
}

foreach my $path (@ARGV) {
print "Scanning... $path\n";

my $ds = dir_stat($path);

print "\tSize: ", $ds->{'size'},
"\tFiles: ", $ds->{'files'},
"\tFolders: ", $ds->{'folders'},
"\n";
}

Datum: 25.05.2007-16:10

Beitragre: Verzeichnisssuche mit einem Perlscript
Seitenanfang

sub dir_stat($) {
my $path = File::Spec->canonpath($_[0]);

my $dir_stat = {
size => 0,
folders => 0,
files => 0,
path => $path,
abspath => File::Spec->rel2abs($path),
};

unless(opendir DH, $path) {
die sprintf "Error on open directory for reading: %s : %s\n",
$path, $!;
}

my @dir_items = grep(!/^\.\.?$/, readdir(DH));

Datum: 25.05.2007-16:13

Beitragre: Verzeichnisssuche mit einem Perlscript
Seitenanfang

foreach my $dir_item (@dir_items) {

my $fullpath = File::Spec->catfile($path, $dir_item);

if( -l $fullpath # is symbolic link
&& $opts{'check-sym-links'} ) # and symlink check is enabled
{
# convert symlink to real path
$fullpath = readlink($fullpath) or die $!;
}

if(-d $fullpath) { # is directory

my $sub_dir_stat = dir_stat($fullpath);

$dir_stat->{'folder'}++;
$dir_stat->{'size'} += $sub_dir_stat->{'size'};
$dir_stat->{'files'} += $sub_dir_stat->{'files'};
}
elsif(-f $fullpath) { # is regular file
$dir_stat->{'files'}++;

$dir_stat->{'size'} += (stat($fullpath))[7]; # gets filesize
}
else {
warn "Skipped - Neither a directory or regular file: ",
$fullpath, "\n";
}
}

closedir(DH);

return $dir_stat;
}

Datum: 25.05.2007-16:21

-






-
-