Alain: wieviel byte hat ein verzeichniss?

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

  1. 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.

    1. 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

      1. 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

        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. 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

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. 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

        2. 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

      2. 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.

    2. 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

      --
      Zu wissen, was wir nicht wissen, ist die Quelle der Weisheit.
      http://wwwtech.de/
      1. 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.

        1. 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

          --
          Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuehkens ueber die Aussenwelt bevor es die Eierschale aufbricht.
          http://wwwtech.de/
          1. 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.

            1. 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

              --
              Descartes sagte: 'Ich denke, also bin ich.' Ich hingegen sage: 'Ich denke nicht, also bin ich.'
              http://wwwtech.de/
              1. 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.