wieviel byte hat ein verzeichniss?
Alain
- perl
Hallo,
ich möchte mit perl ein verzeichniss also keine einzelne datei abfragen,
wieviel byte schon belegt ist,wie frag ich nach dem byte im verzeichniss?
Grüsse vom
Alain
ich möchte mit perl ein verzeichniss also keine einzelne datei abfragen,
wieviel byte schon belegt ist,wie frag ich nach dem byte im verzeichniss?
Ein Verzeichniss belegt keinen Speicherplatz (theoretisch). Praktisch belegt es Speicher in einer Tabelle wo alle Informatioen der Datenträger Struktur gespeichert werden (FAT). Ob du das Wissen willst weiss ich nicht, aber diese Information hängt vom verwendenten Dateisystem ab.
Struppi.
hi Struppi,
ich möchte mit perl ein verzeichniss also keine einzelne datei abfragen,
wieviel byte schon belegt ist,wie frag ich nach dem byte im verzeichniss?Ein Verzeichniss belegt keinen Speicherplatz (theoretisch). Praktisch belegt es Speicher in einer Tabelle wo alle Informatioen der Datenträger Struktur gespeichert werden (FAT). Ob du das Wissen willst weiss ich nicht, aber diese Information hängt vom verwendenten Dateisystem ab.
also ich möchte auf einem unix system ein verzeichniss erstellen für einen Freund mit einem upload script,welches ich schon habe.
Ich möchte das verzeichniss aber begrenzen nicht für einzelne dateien sondern alle dateien zusammen in dem verzeichniss dürfen eine bestimmte menge bytes
nicht überschreiten.
irgendwie mit
my @Eintraege = readdir(DIR);
einen datei byte upload begrenzer hab ich schon drinnen
open (OUTFILE,">$dir/$remote_filename") || err("Fehler beim Hochladen $remote_filename");
binmode OUTFILE;
while ($bytesread = read($filename, $buffer, 1024)) {
$sum += $bytesread;
if( $sum > $max){
close OUTFILE;
.........
ich möchte aber alle datei-bytes zusammen in dem verzeichniss wissen.
Gruss
Alain
Hi Alain,
könntest Du nicht vor einem upload schnell das Verzeichnis browsen und die Bytes aufsummieren? Dann weißt Du, wieviel DU noch für den neuen upload zur Verfügung stellen willst.
Stefan
Hello,
Du könntet dafür ganz prima den Betriebssystem-Befehl 'du' benutzen. Must Du mal 'du --help' an der Konsole oder über ssh eingeben. Ich könnte mir vorstellen, dass das bei PERL ähnlich heißt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
und noch ein Tipp:
http://www.linuxhaven.de/dlhp/HOWTO/mini/DE-Quota-HOWTO.html
könntest Mir dann mal sagen, ob es mit Quota funktioniert. Ich brauche sowas ähnliches für mein CMS unter PHP. Da bekommen die autorisierten User Bilder-Verzeichnisse und sollen schließlich auch nicht die GIGs vollknallen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
und noch ein Tipp:
danke,aber das war nicht das was ich suchte bzw. hilft mir nicht weiter.
Ich habe in selfhtml http://de.selfhtml.org/cgiperl/sprache/schleifen.htm#rekursion
was gesehen aber das mit den $totalbytes geht nicht bzw. wird nicht angezeigt,nur jede einzelne datei und deren bytes
-> event. ein fehler?
Gruss
Alain
Hi,
könntest Du nicht vor einem upload schnell das Verzeichnis browsen und die Bytes aufsummieren? Dann weißt Du, wieviel DU noch für den neuen upload zur Verfügung stellen willst.
ich habs jetzt so ähnlich grob hingekriegt mit selfhtml:
Hier mal ein Ansatz:
my $dir = '/var/www/html/tom';
my $max = 1024 * 20000;
my @alle;
my $totalbytes = 0;
if(blabla){
upload();
}
else
{
form() unless(bytecheck());
}
exit;
sub bytecheck {
@alle = sort(@alle);
ermitteln($dir);
foreach (@alle){
if ($totalbytes > $maxb){
print "$_ <br>\n";
print "Error - zuviele daten $totalbytes Bytes Total <br>\n";
exit;
}
}
}
sub ermitteln {
my $dir = shift;
my $eintrag;
my $pfadname;
my $jpg_eintrag;
my $bytes;
local *DH;
unless (opendir(DH, $dir)) {
return;
}
while (defined ($eintrag = readdir(DH))) {
next if($eintrag eq "." or $eintrag eq "..");
$pfadname = $dir."/".$eintrag;
if( -d $pfadname) {
$jpg_eintrag = $eintrag;
}
else {
$bytes = -s $pfadname;
$totalbytes += $bytes;
$jpg_eintrag = "$eintrag [$bytes bytes]";
}
push(@alle, $jpg_eintrag);
ermitteln($pfadname) if(-d $pfadname);
}
closedir(DH);
}
Gruss
Alain
Ich möchte das verzeichniss aber begrenzen nicht für einzelne dateien sondern alle dateien zusammen in dem verzeichniss dürfen eine bestimmte menge bytes
Och, les doch mal in der Dokumentation
Natürlich kann man die größe einer datei bestimmen, auch ohne sie einzulesen.
Du suchst: -s $dateiname.
Struppi.
Hallo Struppi,
ich möchte mit perl ein verzeichniss also keine einzelne datei
abfragen, wieviel byte schon belegt ist,wie frag ich nach dem
byte im verzeichniss?Ein Verzeichniss belegt keinen Speicherplatz (theoretisch).
Das ist weder theoretisch noch praktisch richtig. Die Groesse
von Verzeichnissen haengt vom verwendeten Dateisystem sowie der
Anzahl der Eintraege darin und noch einigen weiteren Faktoren ab.
Grüße,
CK
ich möchte mit perl ein verzeichniss also keine einzelne datei
abfragen, wieviel byte schon belegt ist,wie frag ich nach dem
byte im verzeichniss?Ein Verzeichniss belegt keinen Speicherplatz (theoretisch).
Das ist weder theoretisch noch praktisch richtig. Die Groesse
von Verzeichnissen haengt vom verwendeten Dateisystem sowie der
Anzahl der Eintraege darin und noch einigen weiteren Faktoren ab.
ok, ich habe mich falsch ausgedrückt, da ich mich auf den Frager bezogen habe.
Es muss heißen ein Verzeichniseintrag , bzw. in dem konkrenten Fall, daß was er von readdir erhält. Diese Einträge haben keine Größe und belegen den Platz, den das Dateisystem für einen Eintrag benötigt, völlig unabhängig von der Menge der Daten die diese enthalten.
Struppi.
Hallo Struppi,
Es muss heißen ein Verzeichniseintrag , bzw. in dem konkrenten
Fall, daß was er von readdir erhält. Diese Einträge haben keine
Größe und belegen den Platz, den das Dateisystem für einen Eintrag
benötigt, völlig unabhängig von der Menge der Daten die diese
enthalten.
Wie gesagt, das stimmt so nicht. Bei Ext2fs z. B. sind Verzeichnisse
auch nur Dateien, die pro Datei einen Eintrag enthalten und damit von
der Groesse her auch abhaengig von der Anzahl der Dateien sind.
Grüße,
CK
Es muss heißen ein Verzeichniseintrag , bzw. in dem konkrenten
Fall, daß was er von readdir erhält. Diese Einträge haben keine
Größe und belegen den Platz, den das Dateisystem für einen Eintrag
benötigt, völlig unabhängig von der Menge der Daten die diese
enthalten.Wie gesagt, das stimmt so nicht. Bei Ext2fs z. B. sind Verzeichnisse
auch nur Dateien, die pro Datei einen Eintrag enthalten und damit von
der Groesse her auch abhaengig von der Anzahl der Dateien sind.
das heißt also, um auf die Frage von Alain einzugehen, dass man mit:
-s Verzeichniss
dort eine Verzeichnissgröße ermitteln kann?
Struppi.
Hallo Struppi,
Es muss heißen ein Verzeichniseintrag , bzw. in dem konkrenten
Fall, daß was er von readdir erhält. Diese Einträge haben keine
Größe und belegen den Platz, den das Dateisystem für einen
Eintrag benötigt, völlig unabhängig von der Menge der Daten
die diese enthalten.Wie gesagt, das stimmt so nicht. Bei Ext2fs z. B. sind
Verzeichnisse auch nur Dateien, die pro Datei einen Eintrag
enthalten und damit von der Groesse her auch abhaengig von der
Anzahl der Dateien sind.das heißt also, um auf die Frage von Alain einzugehen, dass man
mit:
-s Verzeichniss
dort eine Verzeichnissgröße ermitteln kann?
Das kommt darauf an, wie du 'Verzeichnisgroesse' definierst. Du
bekommst mit -s Verzeichnis die Groesse, die der Verzeichnis-Eintrag
belegt:
root@sunshine boot # perl test.pl
48 byte
288 byte
528 byte
root@sunshine boot #
(/boot ist bei mir ein ext2fs :-)
Das ist ja auch der Grund dafuer, warum z. B. Reiserfs viel weniger
Platz fuer dieselbe Datenmenge benoetigt. Das wird sich mit Reiser4
uebrigens nochmal verbessern :-) Du kannst dir ja mal ein paar
Spezifikationen reinziehen, wenn es dich interessiert.
Grüße,
CK
Das ist ja auch der Grund dafuer, warum z. B. Reiserfs viel weniger
Platz fuer dieselbe Datenmenge benoetigt. Das wird sich mit Reiser4
uebrigens nochmal verbessern :-) Du kannst dir ja mal ein paar
Spezifikationen reinziehen, wenn es dich interessiert.
Ohje bloß nicht. Es gibt ja schon jetzt genug andere Sachen, die ich noch nicht weiß oder kann und gerne Wissen würde -)
Und mein Interesse für Betriebsystem interna ist seit längerer Zeit nicht mehr so gross.
Struppi.