Ich versuche, die Dateisystem-Erstellungszeit für eine Datei unter Mac OS mit einem Ruby-Skript festzulegen.
Unter Mac OS X steht "ctime" für die letzte Änderung der Inode und nicht für die Erstellungszeit der Datei. Die Verwendung von ruby's File.utime () zur Einstellung von ctime hilft also nicht.
Mit diesem Hinweis [ Ссылка ] kann ich die Erstellungszeit einer Datei abrufen:
%Vor%... aber irgendeine Idee, wie man es mit Ruby setzt?
- AKTUALISIEREN -
Okay, ich denke ich kann das tatsächlich mit File.utime
in Ruby machen.
Obwohl die ctime von Mac OS technisch nicht dazu verwendet wird, die Erstellungszeit von Dateien zu verfolgen, wenn Sie utime
verwenden, um ctime zu aktualisieren (zusammen mit mtime ), welches gleichzeitig gesetzt werden muss) das Dateisystem scheint auch die Erstellungszeit wie in kMDItemContentCreationDate
magisch zu aktualisieren.
So setzen Sie filename auf eine ctime vom 1. Okt 2010 und eine mtime vom 2. Okt 2010:
%Vor% Es gibt eine Ruby-Lösung mit der Methode utime
. Aber Sie müssen Modifikationszeit (mtime) und Zugriffszeit (atime) auf einmal festlegen. Wenn Sie die Zugriffszeit beibehalten möchten, können Sie Folgendes verwenden:
Siehe Ruby-Core-Dokumentation .
Sie haben definitiv eine reine Ruby-Lösung, aber da dies OS X ist, sind Sie gegen exec()
oder system()
und benutzen nur touch
? In deinem Fall würde ich fast bevorzugen:
nur aus Gründen der Klarheit.
Damit kann ich die Erstellungszeit unter OS X 10.11.1 aktualisieren:
%Vor% Kein Anspruch auf Portabilität - SetFile ist ein OS X-Befehl (und die man-Seite sagt, dass es mit XCode 6 veraltet ist, also möglicherweise nicht sehr lange funktioniert) - konnte keine andere Möglichkeit finden, es zu tun, Time.utime
didn Die Erstellungszeit wird nicht aktualisiert, sondern nur die Zeit geändert und abgerufen.
Siehe: Ссылка
Ruby verwendet den Systemaufruf von utimes, um die Dateizeiten zu ändern.
Das Lesen der Man-Page für utimes erklärt, was passiert:
int utimes (const char * Pfad, const Struktur timeval * mal); .. Wenn Zeiten nicht NULL sind, wird angenommen, dass sie auf ein Array von zwei Zeitwerten zeigen Strukturen. Die Zugriffszeit wird auf den Wert des ersten Elements gesetzt, und die Modifikationszeit wird auf den Wert des zweiten Elements eingestellt. Zum Dateisysteme, die Dateierstellungszeiten (wie UFS2) unterstützen, die Geburtszeit wird auf den Wert des zweiten Elements gesetzt, wenn der zweite Element ist älter als die aktuell eingestellte Geburtszeit. Um beide eine Geburt zu setzen Zeit und eine Modifikationszeit sind zwei Aufrufe erforderlich; der erste zu setzen die Geburtszeit und die Sekunde, um die (vermutlich neuere) Modifikation einzustellen Zeit. ...
So ctime wird nur rückwärts in der Zeit aktualisiert.
Tags und Links ruby macos file filesystems ctime