. und .. aus readdir entfernen (script ist anbei)
pehajo
- perl
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));
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;
#!/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
Moin,
@files = sort grep(!/^./, readdir(FILES));
genauer:
@files = sort grep(!/^..?$/, readdir(FILES));
sonst werden auch saemtlich dotfiles rausgefiltert ;)
Viele Gruesse,
n.d.p.
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