Dateien ändern, nicht aber das Datum
Hans P.
- perl
0 Hans P.0 Michael Schröpl0 Hans P.
0 Stefan Muenz0 Hans P.
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
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
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
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
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.
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
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?
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
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
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
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.
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