Hans P.: Dateien ändern, nicht aber das Datum

Hallo,

Ich möchte gerne in einem Verzeichnis von mir in den Dateien etwas ändern, ohne das Datum der letzten Änderung zu ändern.

ich hätte eigentlich gedacht, daß ich das so machen kann:

--------------------------schnipp------------------------

foreach $members (@members) {
my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat ("$MembersPath/$members");
open (CHECKPROFILE, "$MembersPath/$members");
@foundprofile = <CHECKPROFILE>;
close (CHECKPROFILE);
@memline = split (/|/, $foundprofile[0]);
open (MEMBERFILE2, ">$MembersPath/$members")  || die ("Konnte Datei nicht öffnen  Reason: $!\n");
print MEMBERFILE2 ("$memline[0]|$memline[1]|$memline[2]|$memline[3]|$memline[4]|$memline[5]|$memline[6]|$memline[7]|$memline[8]|$memline[9]|$memline[10]|$memline[11]|||\n");
close (MEMBERFILE2);
utime($mtime, $mtime , "$MembersPath/$members");
} #foreach

---------------------------------schnapp---------------------------

Das klappt auch ganz hervorragend, utime will nicht funktionieren und daher zeigt mein FTP-Programm mir trotzdem für alle Dateien des Verzeichnisses das Datum und die Uhrzeit des Programdurchlaufes an :-(

Wer kann mir mal auf die Sprünge helfen?

Hans

  1. Hm, funktioniert alles prima, wenn ich die Datei nicht beschreiben würde.

    Kann es sein, daß uptime kein Datum zurücksetzen kann?
    Doch wohl nicht oder?

    Hans

  2. Hi,

    Ich möchte gerne in einem Verzeichnis von mir in den Dateien etwas
    ändern, ohne das Datum der letzten Änderung zu ändern.

    da könnte ja jeder kommen!

    Wofür ist Deiner Meinung nach das Datum "der letzten Änderung"
    vorhanden, wenn Du da reinschreiben könntest, was Du willst?

    ich hätte eigentlich gedacht, daß ich das so machen kann:

    Es würde mich ziemlich wundern, wenn es überhaupt irgendwie gehen
    würde (ausgenommen vielleicht unter "root").

    utime($mtime, $mtime , "$MembersPath/$members");

    Die Perl-Doku beschreibt zwar genau ein solches Beispiel, aber mit
    einem Datum, das neuer ist als das bisherige.
    Aus der Tatsache, daß man damit ein "touch" machen kann, zu schließen,
    daß man damit alles machen kann, ist m. E. gewagt.

    Probier mal, die aktuelle Uhrzeit draufzusetzen - und wenn *das*
    geht, dann ist es genau so beabschtigt.

    Viele Grüße
          Michael

    1. Hi Michael,

      klar geht das aktuelle Datum.

      Leider ist es aber so, daß ich die Mitgliederdaten eines recht großen Forums auf ein neues System updaten möchte, ohne aber das für mich administrative Mittel des letzten Memberzugriffes zu verlieren.

      Das scheint utime aber wirklich nicht vorzusehen.

      Hans

      1. Moin,

        Leider ist es aber so, daß ich die Mitgliederdaten eines recht großen Forums auf ein neues System updaten möchte, ohne aber das für mich administrative Mittel des letzten Memberzugriffes zu verlieren.

        mir scheint, das Forumsystem hat da eine grosse Luecke im Konzept ;)

        hint: wenn du an die Systemzeit kommst, koenntest du evtl. was machen.

        Das scheint utime aber wirklich nicht vorzusehen.

        aus gutem Grund, IMHO.

        Viele Gruesse,

        n.d.p.

      2. Hi auch,

        Leider ist es aber so, daß ich die Mitgliederdaten eines recht
        großen Forums auf ein neues System updaten möchte,

        Nur dorthin transportieren? Wenn Du nichts inhaltlich änderst, dann
        nimm "tar" dafür, der erhält die time stamps.

        Wenn Du etwas am Inhalt ändern mußt, hast Du verloren. Das Forum, in
        dem Du gerade diese Nachricht liest, speichert das Datum eines Postings
        im Posting selbst, nicht im Dateisystem. (Letzteres ginge hier auch
        gar nicht, weil alle Postings eines Threads in einer gemeinsamen Datei
        aufbewahrt werden.)

        Wenn Du die alten Daten noch hast, dann kannst Du sie dort in ein neues
        Format (inklusive Posting-Datum!) konvertieren.

        ohne aber das für mich administrative Mittel des letzten Member-
        zugriffes zu verlieren.
        Das scheint utime aber wirklich nicht vorzusehen.

        In der Tat. Im Sinne von UNIX ist das, was Du vorhast, so eine Art
        Urkundenfälschung.

        Viele Grüße
              Michael

        1. Hi!

          Nur dorthin transportieren? Wenn Du nichts inhaltlich änderst, dann
          nimm "tar" dafür, der erhält die time stamps.

          tar erhaelt die timestamps? Nun frage ich mich doch, wie macht tar denn das? Immerhin muesste es beim Auspacken doch auch Dateien erstellen und diese dann zurueckdatieren. Also muesste man im Source-Code von tar die Antwort finden, oder?

          1. Hallo Calocybe,

            Nur dorthin transportieren? Wenn Du nichts inhaltlich änderst, dann
            nimm "tar" dafür, der erhält die time stamps.
            tar erhaelt die timestamps? Nun frage ich mich doch, wie macht tar
            denn das? Immerhin muesste es beim Auspacken doch auch Dateien
            erstellen und diese dann zurueckdatieren.
            Also muesste man im Source-Code von tar die Antwort finden, oder?

            ich sagte doch, daß es kein technisches Problem ist, sondern eines der
            Befugnis.
            Daß irgendeine Systemroutine das entsprechende Byte im Dateisystem auf
            einen beliebigen Wert setzen kann, daran besteht ja kein Zweifel, wie
            man mit "touch" leicht ausprobieren kann.

            Viele Grüße
                  Michael

            1. Hi!

              ich sagte doch, daß es kein technisches Problem ist, sondern eines der
              Befugnis.

              Oh, hatte ich nicht so verstanden. Naja, hab in den letzten Tagen glaub ich eh nen Haufen komische Sachen geschrieben. *g*

              So long

  3. Hallo Hans,

    Ich möchte gerne in einem Verzeichnis von mir in den Dateien etwas ändern, ohne das Datum der letzten Änderung zu ändern.

    Die Anwendung der Perl-Funktion utime() ist auf jeden Fall mal richtig - die tut naemlich genau das: Zeitstempel von Dateien aendern. Hast du mal versucht, beim Aufruf der Funktion den $ctime statt $mtime zu uebergeben?

    viele Gruesse
      Stefan Muenz

    1. Die Anwendung der Perl-Funktion utime() ist auf jeden Fall mal richtig - die tut naemlich genau das: Zeitstempel von Dateien aendern. Hast du mal versucht, beim Aufruf der Funktion den $ctime statt $mtime zu uebergeben?

      viele Gruesse
        Stefan Muenz

      Hi Stefan,

      Klar, ich habe $ctime, $mtime und $atime versucht.

      $ctime sollte ansich auch die richtige sein. Per Textausgabe kann ich mir ja auch ansehen, was Perl eigentlich machen soll und auch will.
      Das Beschreiben der Datei scheint aber utime zu überstimmen.

      Es scheint sehr wohl etwas daran zu sein, daß der Zeitstempel eine "Art Urkunde" ist, die zumindewst nicht rückdatiert werden kann.

      Außerdem ist etwas daran, daß es ein Konzeptfehler des Forums ist, keinen Zeitstempel (wofür auch immer) in die Memberdatei zu schreiben.

      Seils drum, das habe ich jetzt geändert, so werde ich zukünftig keine Zeitstempelprobleme mehr haben :-))

      Danke für Eure Antworten

      Hans P.

      1. Hallo Hans,

        Es scheint sehr wohl etwas daran zu sein, daß der Zeitstempel eine "Art Urkunde" ist, die zumindewst nicht rückdatiert werden kann.

        Es gibt allerdings das Perl-Modul Time::Local, mit dessen Hilfe ein beliebiger Zeitpunkt, anzugeben durch Datum und Uhrzeit, erzeugt werden kann. Siehe auch http://www.perl.com/pub/doc/manual/html/lib/Time/Local.html

        viele Gruesse
          Stefan Muenz