Wie ändere ich das Erstellungsdatum (st_birthtime) einer Datei in Lion? [Duplikat]

10

touch(1)kann sich nur ändern , Änderung und Zugriffszeiten, aber keine Optionen für hat Erstellungszeit. Dies funktioniert nicht, zumindest nicht bei Lion.

So wie ich das ändern Erstellungszeit, auch bezeichnet als Geburtszeit in fstat(2)? Es gibt keinen entsprechenden Aufruf utimes(2)und es scheint kein Befehlszeilenprogramm dafür zu geben.

Ich weiß, dass ich die Datei in eine neue Datei kopieren kann, die dann die aktuelle Uhrzeit als Geburtszeit erhält (und dann das Original löscht), aber es muss doch einen besseren Weg geben?

Ingmar Hupp
quelle
1
touch -t yyyymmddhhmm $filescheint das Erstellungsdatum zu ändern, aber nur, wenn es vor dem ursprünglichen Erstellungsdatum liegt.
Lri
Guter Punkt, @Lri - das ist tatsächlich sinnvoll, da dadurch mtime und atime aktualisiert werden und auf eine Datei vor ihrer Erstellung nicht zugegriffen oder sie nicht geändert werden konnte. Aber ich kann keine neuere Erstellungszeit festlegen.
Ingmar Hupp
Beziehen Sie sich auf eine Änderung über die Befehlszeile oder nur allgemein, nicht unbedingt über die CLI?
Daviesgeek
Ehrlich gesagt würde ich hoffen, dass Sie es nicht ändern können, da es sicherlich den gesamten Punkt des Feldes besiegen würde?! Ich vermute auch, dass ein Teil des Problems darin besteht, dass die Geburts- / Erstellungszeit keine Standardfunktion des Dateisystems ist. Ich denke, hfs hat es in seinen erweiterten Attributen hinzugefügt. Wenn also die Dienstprogramme nicht aktualisiert wurden, um dies zu erkennen, können sie nicht viel damit anfangen.
Caesium

Antworten:

6

touch -t Ändert auch die Erstellungszeit, wenn die Zieländerungszeit vor der ursprünglichen Erstellungszeit liegt.

SetFile kann die Erstellungszeit so einstellen, dass sie vor der Änderungszeit oder in der Zukunft liegt.

-d date    Sets the creation date, where date is a string of the
           form: "mm/dd/[yy]yy [hh:mm:[:ss] [AM | PM]]" Notes:
           Enclose the string in quotation marks if it contains spa-
           ces. The date must be in the Unix epoch, that is, between
           1/1/1970 and 1/18/2038. If the year is provided as a two-
           digit year, it is assumed to be in the 21st century and
           must be from 00 (2000) through 38 (2038).

Dies würde die Erstellungszeit auf die Änderungszeit setzen:

SetFile -d "$(GetFileInfo -m test.txt)" test.txt

SetFile und GetFileInfo ist Teil des Kommandozeilen - Tools - Pakets, das von Xcode-Einstellungen oder heruntergeladen werden kann developer.apple.com/downloads .

Lri
quelle
Genau genommen "Geburt" ( crtime) und ctime sind verschiedene Dinge (siehe Dateierstellungszeiten in ZFS
G. Cito
Natürlich sind Zugriffs- und Änderungszeiten oft gleich - aber aus unterschiedlichen Gründen. Die touchund stat Handbuchseiten enthalten die Details. Mich würde interessieren, wie OpenZFS für OSX sowie die "nativen" OSX-Dateisysteme mit crtimeFeldern umgehen oder welche statBerichte für die crtimeverschiedenen Versionen von OSX vorliegen.
G. Cito
-1

Versuchen:

cat filename > newfile
mv filename ~/.Trash/
mv newfile filename 

Das sollte funktionieren.

Sean Freitag
quelle
1
Sie müssen das Original noch löschen. Ingmar hatte dies bereits behandelt.
Hippo
Hoppla, hätte besser lesen sollen. Aber nein, es gibt keinen besseren Weg ...
Sean Freitag