zeitstempel beim kopieren von dateien

Post Reply
Message
Author
dubdidu
Posts: 26
Joined: 15. Apr 2006 3:42

zeitstempel beim kopieren von dateien

#1 Post by dubdidu »

hallo zusammen :-)


ich gehöre nun auch als absoluter neuling zu den linux-nutzern (suse 10.0 - kde) und bin richtig zufrieden damit.

nur eine sache bekomme ich einfach nicht geregelt - habe schon zig stunden im internet bei der suche nach einer lösung verbracht, leider ohne erfolg.

eines erscheint mir vorab wichtig zu sein: die festplatte von meinem compi ist so partitioniert bzw. aufgeteilt, dass auf einer partition (halt für das betriebssystem gedacht) suse installiert ist und die andere partition für die daten sein soll; allerdings ist letztere partition eine fat32(!).

mein folgendes problem tritt auch nur innerhalb der fat32-partition auf (dies scheint mir "gefühlt" auch der haken an der sache zu sein):

wenn ich eine datei kopiere (ich mache das mit dem "konqueror"; kopieren/einfügen), dann hat diese kopierte datei automatisch den aktuellen zeitstempel (im sinne der letzten veränderung), und genau das möchte ich nicht. wenn ich also zum beispiel eine datei "xyz.pdf" (zuletzt geändert am 20.05.2000) von einem ordner in einen anderen ordner kopiere, dann hat die kopie dieser datei den real-aktuellen zeitstempel (mstamp?).

mir geht es darum, dass nur dann der zeitstempel aktualisiert werden soll, wenn ich eine datei öffne, den inhalt verändere und dann wieder speichere - und eben nicht durch bloßes kopieren der zeitstempel verändert/aktualisiert wird.

ich glaube schon herausgefunden zu haben, dass man dies mit einer einfachen zeile innerhalb der konsole machen kann (stichwort -p bzw. "preserve").
der "trick" mit der konsole hilft mir schonmal weiter, aber ich suche nach einer lösung, die ich sozusagen in der verantwortlichen instanz (yast, kontrollzentrum, kernel, konqueror oder wo auch immer dieses verhalten festgelegt ist) fest verankern kann.

mein ziel ist also, dass der zeitstempel der letzten änderung einer datei beim bloßen kopieren (mit dem konqueror) so belassen wird wie er ist; und zwar zum einen immer, und zum anderen insbesondere auf der partition mit fat32.


bin ich noch zu retten? ;-)

tausend dank schonmal für tips und anregungen - bin für jeden hinweis dankbar :-)

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

Re: zeitstempel beim kopieren von dateien

#2 Post by Janka »

Hm. Eigentlich ist das Verhalten so wie es ist absolut erwünscht. Wenn man eine Datei kopiert, erzeugt man ja eine neue Datei -- und die ist nunmal zum Zeitpunkt des Kopierens erzeugt.

cp und einige andere Programme (tar, cpio, etc.) können *nachträglich* einige Datenfelder der neu erzeugten Datei so ändern, dass sie *ähnlich* der Originaldatei erscheint. Das muss das jeweilige Programm aber machen!

Wenn du das Datum der ersten Erzeugung einer Datei irgendwo unveränderbar speichern möchtest, musst du dies in der Datei selbst oder im Dateinamen machen. Das ist sowieso eine gute Idee, falls du Dateien schnell&simpel versionieren willst.

Janka

komsomolze
Posts: 430
Joined: 03. Mar 2006 23:16

#3 Post by komsomolze »

hab es gerade mal ausprobiert (Versuch macht klug)

Beim Kopieren werden atime und mtime der alten Datei uebertragen.
'--preserve=timestamps' scheint der Standard zu sein.

'--no-preserve=timestamps' alle times bekommen den neuen Wert

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

komsomolze wrote:hab es gerade mal ausprobiert (Versuch macht klug)

Beim Kopieren werden atime und mtime der alten Datei uebertragen.
'--preserve=timestamps' scheint der Standard zu sein.
Bei mir (SuSE9.3, Kernel 2.6.16) nicht. Hier erhalten die Kopien von cp die aktuelle Zeit als mtime, atime und ctime. Und natürlich das Original jeweils die Zeit der letzten Kopie als atime.

Janka

dubdidu
Posts: 26
Joined: 15. Apr 2006 3:42

#5 Post by dubdidu »

hallo nochmals und danke für die antworten :-)


das argument des "erwünschten verhaltens" von janka kann ich gut nachvollziehen - die kopie einer datei ist im prinzip etwas "neues" und bekommt darum den aktuellen zeitstempel (auch den der letzten modifikation).

andererseits finde ich, dass beim bloßen kopieren einer datei der inhalt ja nicht verändert wird, und darum der zeitstempel der letzten veränderung nicht aktualisiert werden bräuchte. (mir geht es ja auch nicht um das datum der ersten erzeugung, wobei ich die idee, diese im dateinamen selbst zu verewigen, auch prima finde).

aber das ist letzten endes bestimmt nix weiter als eine ansichtssache des jeweiligen nutzers. :-)


jedenfalls wird bei mir auf der partition, auf welcher linux suse 10.0 installiert ist, der zeitstempel beim kopieren einer datei nicht angetastet (im sinne der letzten änderung). dieses verhalten kenne ich auch noch aus früheren (windows)-zeiten - und bei komsomolze klappt es ja ebenfalls mit dem "preserve"-standard.

nur bei vorgängen auf dem zweiten teil meiner festplatte (die fat32-partition für daten und dateien) wird beim kopieren der zeitstempel (mstamp) leider immer aktualisiert.


ich versuche mal anhand der bisherigen erkenntnisse eine "windige these":

>> das unterschiedliche verhalten mit den zeitstempeln hat etwas mit meiner fat32-partition zu tun.
es gibt keine möglichkeit für einen anfänger, den "preserve"-modus beim kopieren irgendwo als standard einzustellen (also irgendwo auf einer tieferen ebene des systems, welche auch bei kopiervorgängen auf der fat32-partition greift sowie auch das verhalten vom konqueror entsprechend beeinflusst). <<

wenn das so stimmt(?) müsste die lösung darin liegen, die fat32-partition loszuwerden und entsprechend neu (linux/suse-konform) zu formatieren?


bis bald und liebe grüße :-)

komsomolze
Posts: 430
Joined: 03. Mar 2006 23:16

#6 Post by komsomolze »

Janka wrote:Bei mir (SuSE9.3, Kernel 2.6.16) nicht. Hier erhalten die Kopien von cp die aktuelle Zeit als mtime, atime und ctime. Und natürlich das Original jeweils die Zeit der letzten Kopie als atime.
tschuldigung, muss mich korrigieren:
Mit cp ist es so wie janka beschreibt. Ich hatte es mit midnight-commander ausprobiert.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#7 Post by Janka »

dubdidu wrote: nur bei vorgängen auf dem zweiten teil meiner festplatte (die fat32-partition für daten und dateien) wird beim kopieren der zeitstempel (mstamp) leider immer aktualisiert.
FAT hat keine getrennten Felder für ctime, atime, mtime, sondern ziemlich kaputtdesignte Zeit/Datumsfelder.

Code: Select all

/usr/src/linux/Documentation/filesystems/vfat.txt&#58;

struct directory &#123; // Short 8.3 names
    unsigned char name&#91;8&#93;;          // file name
    unsigned char ext&#91;3&#93;;           // file extension
    unsigned char attr;             // attribute byte
    unsigned char lcase;    // Case for base and extension
    unsigned char ctime_ms;   // Creation time, milliseconds
    unsigned char ctime&#91;2&#93;;   // Creation time
    unsigned char cdate&#91;2&#93;;   // Creation date
    unsigned char adate&#91;2&#93;;   // Last access date
    unsigned char reserved&#91;2&#93;;  // reserved values &#40;ignored&#41;
    unsigned char time&#91;2&#93;;          // time stamp
    unsigned char date&#91;2&#93;;          // date stamp
    unsigned char start&#91;2&#93;;         // starting cluster number
    unsigned char size&#91;4&#93;;          // size of the file
&#125;;
Was der Linux-Kernel aus dieser Schrottvorlage macht, habe ich jetzt auf die Schnelle aber nicht gefunden.

Janka

dubdidu
Posts: 26
Joined: 15. Apr 2006 3:42

#8 Post by dubdidu »

und wieder einmal hallo :-)


janka, tausend dank erstmal - das sieht ja wirklich danach aus als hätte der linux-kernel ein problem mit den in diesem falle unzureichenden fat-"features".

scheint so als müsste ich meine betreffende fat-partition noch einmal linux-konform neu formatieren (oder es vielleicht mit solch einem tool wie dem midnight-commander ausprobieren).

super, mit diesen erkenntnissen kann ich mich erstmal in die experimentierkammer begeben - vielen dank nochmals. :-)


es bliebe vielleicht nur noch eine frage übrig:

janka benutzt suse 9.3 und die zeitstempel werden beim kopieren (mtime) aktualisiert - und auch bei komsomolze ist dies so.

ich benutze suse 10.0 und bei mir werden die zeitstempel (zumindest auf der partition mit dem betriebssystem) beibehalten.


dies wiederum klingt danach als wären verschiedene suse-versionen (und/oder kernel-varianten) für dieses unterschiedliche verhalten verantwortlich. auch dann, wenn die kopiervorgänge nicht auf fat-partitionen stattfinden, sondern beispielsweise auf "reiserfs" (wie bei meiner partition für das betriebssystem).

könnte dies zutreffen?


in diesem sinne und liebe grüße :-)

Marco Gerber

#9 Post by Marco Gerber »

tach

Fakt ist:
Ein Kopiervorgang besteht aus dem oeffnen der Quelldatei, dem Erzeugen (oeffnen) der Zieldatei, und dem lesen des Inhaltes aus der Quelldatei und dem Schreiben in die Zieldatei mit anschliessendem Schliessen beider Dateien.
Dafuer stehen Systemcalls zur Verfuegung (open, read, write, close). Dem Dateisystem ist es voellig wurscht, ob der Inhalt beidesmal der selbe ist, denn das System kennt den Kontext des Schreiben der Datei nicht (und braucht ihn auch nicht zu kennen).
Wenn also Zeitdaten veraendert werden sollen, muss dies explizit erfolgen, und zwar wie bereits erwaehnt wurde durch das zustaendige Programm.
Das fuehrt direkt dazu, dass du keine Moeglichkeit hast, dies Systemweit so zu definieren, dass eine "Kopie" ihre Zeitstempel nicht aendern soll (denn dafuer muesste ein "copy" Systemcall existieren, was nicht der Fall ist).

Aus der Manpage von cp geht folgendes hervor:

Code: Select all

       -p     Preserve  the original files' owner, group, permissions &#40;includ-
              ing the set-user-ID and set-group-ID bits&#41;, time of last modifi-
              cation and time of last access.  In case duplication of owner or
              group fails, the set-user-ID and set-group-ID bits are  cleared.
              &#40;Note  that  afterwards  source and copy may well have different
              times of last access, since the copy operation is an  access  to
              the source file.&#41;
So, und jetzt muss man noch wissen, dass FAT keine Benutzerrechte kennt, also der Fall "In case duplication of owner or group fails" eintritt. Und damit der Teil von (Note ...).

Wenn du jetzt systemweit diese Eigenschaft willst, musst du einen Systemcall programmieren (und nennst ihn "copy" beispielsweise) und schreibst alle Programme um, die Dateien kopieren koennen.

Ich hoffe, ich konnte verstaendlich darlegen, weshalb dein Vorhaben nie gelingen wird.



Nebenhergesagt; was macht es schon fuer einen Sinn, einer Kopie den selben Zeitstempel zu geben wie dem Original? Wenn naemlich die Kopie veraendert wird, gilt sie ja aus Sicht des Benutzers als eigene Datei (das ist so weltfremd...). Also werden die beiden Dateien nur so lange gleich sein, bis sie veraendert wurden (und das ist wiederum zu tiefst logisch).
Und wenn du herausfinden willst, ob eine Datei eine Kopie (exakte Kopie in Form der nichtveraenderten Datei) ist, kannst du diff verwenden oder ihren md5 hash vergleichen ;}

greetz by
Marco

Marco Gerber

#10 Post by Marco Gerber »

@Janka:
/usr/src/linux/fs/vfat/namei.c

greetz by
Marco

FDJler

Re: zeitstempel beim kopieren von dateien

#11 Post by FDJler »

Janka wrote:Hm. Eigentlich ist das Verhalten so wie es ist absolut erwünscht. Wenn man eine Datei kopiert, erzeugt man ja eine neue Datei -- und die ist nunmal zum Zeitpunkt des Kopierens erzeugt.

cp und einige andere Programme (tar, cpio, etc.) können *nachträglich* einige Datenfelder der neu erzeugten Datei so ändern, dass sie *ähnlich* der Originaldatei erscheint. Das muss das jeweilige Programm aber machen!

Wenn du das Datum der ersten Erzeugung einer Datei irgendwo unveränderbar speichern möchtest, musst du dies in der Datei selbst oder im Dateinamen machen. Das ist sowieso eine gute Idee, falls du Dateien schnell&simpel versionieren willst.

Janka
> Eigentlich ist das Verhalten so wie es ist absolut erwünscht
Ich denke, eher nicht. Deshalb behalten brauchbare Werkzeuge mtime und setzten nur ctime auf den aktuellen Wert. Dies ist zwar auch nur ein fauler Kompromiss, aber besser als mtime u. ctime neu zu setzen, und mtime ist m. E. der erhaltenswertere Fakt.
Ganz allgemein könnten etwas mehr Informationen zu Dateien (im Dateisystem!) gespeichert werden (ä. Apfels Ressource-Fork), File/Magic sind doch (prinzipbedingt) nur Krücken.
Ja, und überhaupt, solange Datenbanken und Dateisysteme verschiedene Dinge sind, taugen sie beide nichts.

dubdidu
Posts: 26
Joined: 15. Apr 2006 3:42

#12 Post by dubdidu »

und abermals hallo :-)

vielen dank marco, ich habe den kontext des zusammenhangs verstanden.
insbesondere war mir nicht bekannt, dass "fat" weder benutzerrechte erkennt noch felder für die diversen zeitstempel besitzt.

insofern dürfte mein problem anhand der erkenntnis gelöst sein, mich von "fat" zu trennen und die festplatten-partition entsprechend konform neu zu formatieren.
beispielsweise mittels "reiserfs", denn diese struktur befindet sich ja schon auf meiner ersten (betriebssystem)-partition und verhält sich beim kopieren meinen wünschen entsprechend. wenngleich dieses verhalten wohl von der norm abzuweichen scheint(?) - siehe die erfahrungswerte von janka und komsomolze.


was den sinn oder unsinn von beibehaltenen zeitstempeln angeht, kann ich nur sagen, dass zumindest für mich ein unangetastetes "mtime" beim kopieren wichtig ist. ich arbeite im sinne eines gesamtprojekts mit sehr vielen textdateien gleichzeitig und kopiere diese je nach bearbeitungsstatus (und der ordnung halber) immer wieder in entsprechende ordner (hin und her). dabei ist der "mstamp" insofern wichtig, als dass ich einzelne textdateien bzw. deren status anhand der letzten änderung ihres inhalts zuordnen können muss.

in diesem sinne und nochmals vielen dank :-)

Post Reply