AndreasN: Dateiattribute auslesen ?

Hallöchen !
Ich habe folgendes Problem:
Ich möchte von einer bestimmten datei, ein backup datei erstellen lassen , und die dann regelmäßig auch löschen (denn ich will ja nicht irgendwann mal 1000 -de dateien auf dem server haben)
Nun mein problem, Ich möchte diese Datei, wenn diese 3 tage alt ist löschen ....dazu muß ich ja die dateiattribute auslesen , damit komme ich aber irgendwie nicht ganz klar.
Daß da epoche-sekunden ausgegeben werden, ist klar...nur klappt das auslesen der letzten änderun/zugriffes nicht ....

Kann mir vielleicht jemand einen tipp geben , wie das auf dem einfachsten Wege zu ermöglichen wäre ??

Bin für jeden Tip dankbar ...danke im voraus
Gruß
Andreas

  1. Hallo Andreas,

    mit
    my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks)  = stat($filename);

    bekommst Du die Datei-Attribute raus.
    Dabei ist $mtime die epoch-time der letzten Änderung.
    und mut 'time()' bekommst Du die aktuelle Uhrzeit raus.
    das heißt dann :

    $now = time();
    $three_days_before_now = $now -(3*24*3600);

    if($mtime < $three_days_before_now)
       {
       print "$file is not modified since three days\n";
       }

    alles klar??
    Klaus

    1. Hi,

      my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks)  = stat($filename);

      es ist mir ein Rätsel, warum sich diese Mär, man müsse für jede noch so kleine Information stat benutzen, so hartnäckig hält:

      perldoc -f -X

      [...]
      -M  Age of file in days when script started.
      -A  Same for access time.
      -C  Same for inode change time.

      Prüf also einfach auf -C $file > 3.

      Cheatah

      1. Danke schön, ich werde es mal ausprobieren!
        Gruß Andreas

      2. Hallo Cheatah,

        es ist mir ein Rätsel, warum sich diese Mär, man müsse für jede noch so kleine Information stat benutzen, so hartnäckig hält:

        Mein Gott, ist das pingelig!

        Übrigens, die '-X' -Operatoren rufen auch 'stat(2)' auf, und mit stat ist's doch etwas flexibler, denk ich.
        Aber das ist ja alles Haarspalterei. Jeder so wies ihm gefällt.

        Ich sag dann nur noch: "TMTOWTDI".

        Klaus

        1. Hi,

          es ist mir ein Rätsel, warum sich diese Mär, man müsse für jede noch so kleine Information stat benutzen, so hartnäckig hält:

          Mein Gott, ist das pingelig!

          keineswegs. Mach mal 'nen Benchmarktest über ein paar tausend solcher Zugriffe. Gerade, wenn alle Dateien eines Verzeichnisses (oder gar Verzeichnisbaumes) bearbeitet werden sollen, ist es extrem sinnvoll, die optimierteste Abfragemethode zu benutzen.

          Übrigens, die '-X' -Operatoren rufen auch 'stat(2)' auf, und mit stat ist's doch etwas flexibler, denk ich.

          Sowie mehrere -Xe abgefragt werden (sagen wir, mehr als drei oder so), gebe ich Dir recht.

          Ich sag dann nur noch: "TMTOWTDI".

          Ja, und auch über China kommt man nach Rom. Die Frage ist nur, wie viele Blasen man am Ende an den Füßen hat.

          Cheatah

          1. Hallo Cheatah,

            Mir ging's nicht so sehr um irgendwelche Argumente für oder gegen eine bestimmte Methode, ein Problem zu lösen.

            Mich stört nur die Art wie so was geschieht. Wenn Du eine andere Ausdrucksweise gewählt hättest, dann hätte mich das auch nicht so gestört.

            Ja, und auch über China kommt man nach Rom. Die Frage ist nur, wie viele Blasen man am Ende an den Füßen

            hat.

            wenn nur so wäre, Dein Vergleich trifft's leider wirklich nicht.

            Ich hab hier bei mir ein bißchen rumgespielt, und kann Dir sagen, der unterschid ist eher marginal. Mal ist die eine Methode, mal die andere gerade mal schneller. Da würde ich eher sagen, wir reden davon, ob Du über Salzburg oder Innsbruck nach Rom fährst. Je nach Verkehrslage ist es halt mal so, mal so schneller.

            Deine Argumentation läuft darauf hinaus, daß wir hier von Quantensprüngen reden. Das ist es nun mal nicht. Zumindest bei mir:

            <CODE>
            #!/usr/bin/perl
            use Benchmark qw/cmpthese timethis timediff timestr/;
            use File::Find;

            @Files = ();

            find sub {push @Files,$File::Find::name;}, ('D:\');

            print "$#Files Files found\n";
            $now = Time;
            $dayseconds = (24*3600);

            $t0 = new Benchmark;
            foreach $file (@Files)
            {
            $modtime= ($now - stat($file)->[9])/$dayseconds;
            }

            $t1 = new Benchmark;
            $td = timediff($t1, $t0);
            print "Stat filename took:",timestr($td),"\n";

            $t2 = new Benchmark;
            foreach $file (@Files)
            {
            $modtime= -C $file;
            }
            $t3 = new Benchmark;
            $td2 = timediff($t3, $t2);
            print "-C filename took:",timestr($td2),"\n";

            </CODE>

            <RESULT>
            33425 Files found
            Stat filename took:24 wallclock secs ( 3.80 usr + 19.42 sys = 23.21 CPU)
            -C filename took:23 wallclock secs ( 3.83 usr + 18.87 sys = 22.69 CPU)
            </RESULT>

            Da hab ich sicherlich was falsch gemacht, oder??

            Aber ich will mich jetzt nicht in irgendwelche Grundsatzdiskussionen einlassen, weil doch zu nichts führt.
            Wenn's unbedingt sein soll, dann hab' halt ich unrecht und Du vollkommen recht. Ich kann damit leben.

            Herzliche Grüße

            Klaus

            1. Deine Argumentation läuft darauf hinaus, daß wir hier von Quantensprüngen reden.

              Leute,
              macht euch doch bitte einmal klar, wie unendlich KLEIN !!! so ein Quantensprung ist. Warum wird dieser Begriff immer falsch benutzt.

              »»Das ist es nun mal nicht. Zumindest bei mir:
              Na ebend doch !!!

              Bye
              Timothy

    2. Danke schön, ich werde es mal ausprobieren!
      Gruß Andreas