Wie kann ich das Erstellungs-Datum einer Datei manipulieren?

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
AndreK
Beiträge: 469
Registriert: 17.05.2007 19:20:58

Wie kann ich das Erstellungs-Datum einer Datei manipulieren?

Beitrag von AndreK » 23.10.2007 16:10:34

Ich habe hier ein kleines Problem mit einem alten blog von mir. Die posts wurden als txt Dateien abgespeichert. Das Datum wird aus den Dateiattributen (heisst das so?) geholt. In der Datei gibt es also kein hinterlegtes Datum.

Ich habe ein anderes Blog das läuft mit MySQL. Ich kann die einzelnen Posts als txt Dateien exportieren, aber das Datum wäre für alle Dateien das heutige Tagesdatum.

Gibt es einen Weg um händisch das Datum auf das Erstellungsdatum des Posts zu ändern? Es sind nur ca. 80 Dateien die ich rüberholen wollte, also denke ich es man kann es von Hand korrigieren. Mit einem kleinen script wäre es natürlich schneller getan.

Wie stelle ich das an?

Benutzeravatar
blueflidge
Beiträge: 1414
Registriert: 31.01.2005 10:16:49
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: bei Bonn

Beitrag von blueflidge » 23.10.2007 16:14:18

Das dürfte mit touch gehen.
Siehe dazu die man-page und:
https://www.debianforum.de/forum/viewtopic.php?t=91143

Alternativ kann auch krename [1] das, was du möchtest.

[1] http://www.krename.net/
Beste Grüße
Tamara
The Debian Women Project

Benutzeravatar
deadeye
Beiträge: 561
Registriert: 14.04.2004 15:32:18
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ukio, rechts hinterm Feld
Kontaktdaten:

Beitrag von deadeye » 23.10.2007 16:16:39

Code: Alles auswählen

man touch
So grob überflogen willst:

Code: Alles auswählen

touch -m -t  $stamp $file
Gruß
deadeye

Edit: Schade, zu langsam ;-).

AndreK
Beiträge: 469
Registriert: 17.05.2007 19:20:58

Beitrag von AndreK » 23.10.2007 18:01:21

Ok, touch macht das Rennen. krename ist doch zu viele klicks.

Leider lässt sich das Datum der Erzeugung nicht ändern.
touch 1.txt

setzt alles auf Tageszeit des touch ändert das Datum für (erzeugt, geändert, zugegriffen)

touch -t 8001031305 1.txt

ändert (geändert, zugegriffen) 13:05 Januar 3, 1980

touch -a 8001031305 1.txt

ändert (zugegriffen)

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 23.10.2007 18:12:23

:?: ja aber :?:

was für ein Dateisystem verwendest du? Um nicht zu sagen,
was für ein Betriebssystem?

Ich dachte immer, Unix-artige Dateisysteme kennen kein
Erzeugungsdatum; wo hast du das her?
Beware of programmers who carry screwdrivers.

Benutzeravatar
deadeye
Beiträge: 561
Registriert: 14.04.2004 15:32:18
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ukio, rechts hinterm Feld
Kontaktdaten:

Beitrag von deadeye » 23.10.2007 18:54:22

Linux(oder wenigstens das FS ext2/3) kennt:
atime - access time, lesender Zugriff
ctime - change time, Änderung an den Dateiattributen(und alles was nich Inhalt ist)
mtime - modify time, Änderungen am Inhalt

Zurück zum Prob: in der Tat scheint touch nicht die ctime ändern zu können.
Wenn man den Onkel Google nach "change ctime linux" fragt, ist die erste Antwort schon sehr aufschlussreich: ohne das Systemdatum zu ändern oder tief im Dateisystem rumzupfuschen geht es nicht.

Mein Tipp: schreib die Blog-Software um, sodass sie mtime statt ctime ausließt.

crazyed

Beitrag von crazyed » 24.10.2007 05:37:51

Mit cp wird das aktuelle Datum für die Kopie gesetzt. Wenn man allerdings den Midnight Commander verwendet(mit F5) bleibt das Erstellungsdatum erhalten. Weiß der Geier warum, ich habe keine Lust den hinterlegten Befehl auszugraben...

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 24.10.2007 16:43:40

deadeye hat geschrieben:Wenn man den Onkel Google nach "change ctime linux" fragt, ist die erste Antwort schon sehr aufschlussreich: ohne das Systemdatum zu ändern oder tief im Dateisystem rumzupfuschen geht es nicht.
Das funktioniert schon, etwa mit debugfs aus dem Paket e2fsprogs.

Ich zeige mal das Vorgehen an einem Beispiel unter Etch und einem ext3-Dateisystem:

Anlegen eines Test-Verzeichnisses und einer Test-Datei:

Code: Alles auswählen

mkdir /ctime_test
echo "blabla" > /ctime_test/test_file
Anzeigen der Zeiten (atime, mtime, ctime):

Code: Alles auswählen

stat /ctime_test/test_file
File: „/ctime_test/test_file“
(...)
Access: 2007-10-24 13:52:09.000000000 +0000
Modify: 2007-10-24 13:52:09.000000000 +0000
Change: 2007-10-24 13:52:09.000000000 +0000
Das Dateisystem mit debugfs im read-write Modus öffnen (hier /dev/sda3):

Code: Alles auswählen

debugfs -w /dev/sda3
Dann folgendes in debugfs eingeben, um die Zeiten anzuzeigen:

Code: Alles auswählen

show_inode_info /ctime_test/test_file
ctime: 0x471f4e09 -- Wed Oct 24 13:52:09 2007
atime: 0x471f4e09 -- Wed Oct 24 13:52:09 2007
mtime: 0x471f4e09 -- Wed Oct 24 13:52:09 2007
Dann die ctime ändern, hier auf 2. Januar 2007 03:04:05

Code: Alles auswählen

set_inode_field /ctime_test/test_file ctime 20070102030405
Geänderte Zeiten ansehen:

Code: Alles auswählen

show_inode_info /ctime_test/test_file
ctime: 0x4599cba5 -- Tue Jan 2 03:04:05 2007
atime: 0x471f4e09 -- Wed Oct 24 13:52:09 2007
mtime: 0x471f4e09 -- Wed Oct 24 13:52:09 2007
debugfs verlassen: stat ergibt jedoch noch die alte ctime:

Code: Alles auswählen

stat /ctime_test/test_file
File: „/ctime_test/test_file“
(...)
Access: 2007-10-24 13:52:09.000000000 +0000
Modify: 2007-10-24 13:52:09.000000000 +0000
Change: 2007-10-24 13:52:09.000000000 +0000
Nach einem Neustart von Debian (bzw. neu mounten) zeigt stat dann die neue ctime an:
File: „/ctime_test/test_file“
(...)
Access: 2007-10-24 13:52:09.000000000 +0000
Modify: 2007-10-24 13:52:09.000000000 +0000
Change: 2007-01-02 03:04:05.000000000 +0000
:D

Gruß,
Daniel

edit: debugfs befindet sich im Paket e2fsprogs
Zuletzt geändert von Danielx am 25.10.2007 00:32:23, insgesamt 1-mal geändert.

Benutzeravatar
deadeye
Beiträge: 561
Registriert: 14.04.2004 15:32:18
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ukio, rechts hinterm Feld
Kontaktdaten:

Beitrag von deadeye » 24.10.2007 22:49:24

Schön, ich finde mein Vorschlag die Blog-Software abzuändern geht schneller, vorrausgesetzt sie ist vernünftig geschrieben und in einer annehmbaren Programmiersprache(alles außer Perl muhahaha).

Aber trotzdem gut zu wissen.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 25.10.2007 00:41:39

deadeye hat geschrieben:ich finde mein Vorschlag die Blog-Software abzuändern geht schneller
Ja, das kann je nach Fähigkeiten durchaus sein.
AndreK hat aber, wenn ich das richtig verstanden habe, danach gefragt wie man die ctime ("Erzeugung") einer Datei ändern kann. :wink:
Ich hoffe mal er kann mit unseren Tipps etwas anfangen.

Gruß,
Daniel

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von habakug » 26.10.2007 12:04:46

Hallo!

Wie in den meisten Fällen gibt es ein Programm dafür [1].

Gruß, habakug

[1] http://www.hacker-soft.net/tools/Assessment/touch2v2.c

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 26.10.2007 12:39:37

hi,

naja, Systemzeit verstellen kann ja jeder, dazu brauch ich kein Programm.
Außer, das Programm könnte jeglichen Task-Wechsel unterbinden, aber
das kann es nicht (jedenfalls nicht dieses).

Oder ist es nur ein Gerücht, daß Programme wie Bildschirmschoner oder
cron oder ntpd mit rückwärtslaufenden Uhren Probleme haben?
Beware of programmers who carry screwdrivers.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 26.10.2007 14:27:51

cosmac hat geschrieben:naja, Systemzeit verstellen kann ja jeder, dazu brauch ich kein Programm.
Ja, genau.
cosmac hat geschrieben:Außer, das Programm könnte jeglichen Task-Wechsel unterbinden, aber
das kann es nicht (jedenfalls nicht dieses).
Gibt es denn ein solches Programm?
Ist es beim Preemptivem Scheduling überhaupt möglich einen Kontextwechsel zu verhindern, außer im Kernel selbst?
cosmac hat geschrieben:Oder ist es nur ein Gerücht, daß Programme wie Bildschirmschoner oder
cron oder ntpd mit rückwärtslaufenden Uhren Probleme haben?
Ob es sich dabei nur um ein Gerücht handelt, weiß ich leider auch nicht.

Gruß,
Daniel

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 26.10.2007 17:14:51

Danielx hat geschrieben:Ist es beim Preemptivem Scheduling überhaupt möglich einen Kontextwechsel zu verhindern, außer im Kernel selbst?
natürlich geht's nur im Kernel selbst. Man braucht einen System Call,
mit dem das Programm diesen Zustand anfordert und wieder freigibt.
Allerdings müsste es einen Time-Out geben, nur wie lang soll der sein?
Funktioniert der überhaupt, wenn mittendrin die Uhr verstellt wird?
Danielx hat geschrieben:
cosmac hat geschrieben:Oder ist es nur ein Gerücht, daß Programme wie Bildschirmschoner oder
cron oder ntpd mit rückwärtslaufenden Uhren Probleme haben?
Ob es sich dabei nur um ein Gerücht handelt, weiß ich leider auch nicht.
auf jeden Fall werden sämtliche Zeitstempel in Logfiles und von allen
Dateizugriffen verfälscht. Ich hätte sogar Bedenken, daß im Kernel
selbst was durcheinander kommt.
Beware of programmers who carry screwdrivers.

Antworten