pehajo: . und .. aus readdir entfernen (script ist anbei)

Hallo,

als perlnewbie ist es mir schon mal gelungen nachfolgendes script
zu schreiben. (ermittelt belegten webspace und Anzahl der Dateien)
Nur die Anzahl der Dateien stimmt nicht, da . und .. auch
mitgezaehlt werden.
Hat jemand einen Ansatz wie ich die rausfiltern kann?
muesste ein if-Abfrage im Bereich von
use File::Find;
sein? richtig?

Vielen Dank fuer Tipps!

Gruesse

pehajo

--

#!/usr/local/bin/perl

print "Content-Type: text/html\n\n";

$summe_mb=0;

#--Pfad zum Startverzeichnis angeben
$pfad = "/usr/local/etc/httpd/htdocs";

opendir (FILES, "/usr/local/etc/httpd/htdocs");
  @files = readdir(FILES);
  @files = (sort(@files));

. und .. entfernen

shift(@files);
  shift(@files);
closedir (FILES);

print qq|
<html><head><title></title></head><body>
<table border=1>
<tr>
<td>Ordner</td><td>Anzahl</td><td>kB</td><td>MB</td>
</tr>
|;

foreach $file (sort(@files))
{

$groesse_bytes=0;
$anzahl = 0;
$groesse_kilobytes=0;
$groesse_megabytes=0;

use File::Find;
&find ( sub { $groesse_bytes += -s }, "$pfad/$file");
&find ( sub { $anzahl += 1 }, "$pfad/$file");

$groesse_kilobytes =  int ($groesse_bytes / 1024);
$groesse_megabytes = ($groesse_bytes / 1048576);
$groesse_megabytes = sprintf("%.2f",$groesse_megabytes);
$summe_mb = $summe_mb + $groesse_megabytes;

print qq|
<tr>
<td>$file</td> <td>$anzahl</td><td>$groesse_kilobytes</td><td>$groesse_megabytes</td>
</tr>
|;
}
print qq|
</table><BR>
Summe MB: $summe_mb<BR>
</body></html>
|;
exit;

  1. #!/usr/local/bin/perl

    print "Content-Type: text/html\n\n";

    $summe_mb=0;

    #--Pfad zum Startverzeichnis angeben
    $pfad = "/usr/local/etc/httpd/htdocs";

    opendir (FILES, "/usr/local/etc/httpd/htdocs");
      @files = readdir(FILES);
      @files = (sort(@files));

    . und .. entfernen

    shift(@files);
      shift(@files);
    closedir (FILES);

    Nimm dies:

    opendir (FILES, "/usr/local/etc/httpd/htdocs");
    @files = sort grep(!/^./, readdir(FILES));
    closedir (FILES);

    Ciao,
      Wolfgang

    1. Moin,

      @files = sort grep(!/^./, readdir(FILES));

      genauer:

      @files = sort grep(!/^..?$/, readdir(FILES));

      sonst werden auch saemtlich dotfiles rausgefiltert ;)

      Viele Gruesse,

      n.d.p.

    2. Hallo Wolfgang,

      vielen Dank fuer die schnelle Hilfe, leider hab ich es evtl. ungenau beschrieben:

      unter
      opendir (FILES, "/usr/local/etc/httpd/htdocs");
      @files = sort grep(!/^./, readdir(FILES));
      closedir (FILES);

      befinden sich nur Ordner (der user=domains)

      danach oeffne ich jeden Ordner
      foreach $file (sort(@files))
      und lass File::Find; arbeiten.

      Jetzt sind aber in den Orndern der user
      wiederum Unterordner usw. mit . und .. drin
      und die werden gezaehlt.

      Bsp:

      ein user hat folgende Dateien in
      /usr/local/etc/httpd/htdocs/bspuser/

      /cgi-bin/ (Ordner ist leer)
      index.html
      baustelle.gif

      --> das script ermittelt Anzahl: 4 Dateien

      ..hmmh da faellt mir auf: zaehlt File::Find;
      auch die Dateien in den bspuser/unter/unter/unterordner.. *srzn*
      muss mal nachzaehlen..

      Gruesse
      pehajo