Schrift
[thread]12765[/thread]

Verzeichnisgröße bestimmen

Leser: 3


<< >> 9 Einträge, 1 Seite
roooot
 2008-11-15 16:15
#116287 #116287
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo, ich versuche die Verzeichnisgröße rekursiv zu bestimmen. Dazu wollte ich File::Size verwenden, allerdings gibt mir das Ding _immer_ 0 aus. Ein -e auf das Verzeichnis sagt aber 1, also dass es existert.
Kann mir jemand sagen warum das so ist?

Gruss
Viele Grüße :)
Linuxer
 2008-11-15 16:27
#116288 #116288
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Wie wäre es mal mit einem Minimalbeispiel, mit dem sich Deine Beobachtung nachvollziehen lässt?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
roooot
 2008-11-15 16:31
#116289 #116289
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Naja, viel ist da nicht.

Eben der Beispielcode von der cpan Seite CPAN:File::Size + den dir check.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     my $PICDIR = q{./pictures};

    ### get dir size
    use File::Size;
    my $fsobj = File::Size->new(
        dir            => $PICDIR,
        blocksize      => 1024,
        followsymlinks => 1,
        humanreadable  => 1
    );
     
   my $pic_dir_size = $fsobj->getsize();
   my $pic_dir_exist     = -e $PICDIR;

   print $pic_dir_size ."\n". $pic_dir_exist;


Das ganze liegt online auf einem linux Webserver
Viele Grüße :)
Linuxer
 2008-11-15 16:44
#116290 #116290
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Auch wenn's nich viel ist, ist es eine Grundlage, auf der man diskutieren kann. Vorher war nichts da.

Ich würde es gerne nachvollziehen, aber leider sagt mir meine CPAN shell, dass File::Size zwar gefunden wird, aber nicht verfügbar ist.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Linuxer
 2008-11-15 17:04
#116291 #116291
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
hm, als systemspezifischer Workaround:

Code (perl): (dl )
1
2
my $dir = '/etc';
my $size = qx~du -sh $dir~;
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
MatthiasW
 2008-11-15 18:19
#116292 #116292
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Kannst dir auch eine eigene Funktion dafür schreiben (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub getdirsize {
        my( $dir ) = @_;

        my $size = 0;

        opendir( my $dh, $dir )
                or die "Cannot opendir '$dir': $!\n";

        for my $i ( readdir( $dh ) ) {
                my $s = -s "$dir/$i";

                $size += $s;
                $size += getdirsize( "$dir/$i" ) if -d "$dir/$i" && $i !~ /^\.\.?$/;
        } # for

        closedir( $dh );

        return $size;
} # getdirsize

MfG

edit: Danke @Linuxer, habs korrigiert.
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
Linuxer
 2008-11-15 18:39
#116293 #116293
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
@MatthiasW,

warum schliesst Du alle .Dateien aus?

Was ist mit den Home-Verzeichnissen, in denen massig .Ordner (zB: .gnome, .kde, .mozilla) liegen, die Speicherplatz belegen; die übergehst Du komplett.
Du solltest Dein Kriterium auf '.' und '..' einschränken:
Code: (dl )
... && $i !~ /^\.\.?$/;
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
roooot
 2008-11-15 20:33
#116295 #116295
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Habe jetzt auch keine Lust bei dem File::Size ewig rumzudoktern, darum habe ich mir was geschrieben was so aussieht wie deins Matthias, danje dir.
Danke auch dir Linuxer.
Viele Grüße :)
Struppi
 2008-11-16 00:55
#116299 #116299
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
File::Size ist auch fehlerhaft, wenn du willst kannst du es ändern:
Orginal (bei mir Zeile 161):
Code (perl): (dl )
1
2
3
sub _findcb {
        $size += -s $File::Find::name || 0;
}

In:
Code (perl): (dl )
1
2
3
sub _findcb {
        $size += -s $_ || 0;
}

vermutlich ist es auch deshalb nicht installierbar.
<< >> 9 Einträge, 1 Seite



View all threads created 2008-11-15 16:15.