Wie stelle ich die Mtime einer Datei im Epoch-Format ein?

Wie stelle ich die Mtime einer Datei im Epoch-Format ein?

Ich weiß wieerhaltendie Mtime einer Datei im Epoch-Format:

stat --format=%Y <file>

Aber ich habe nicht herausgefunden, wie ichSatzdie Mtime einer Datei im Epoch-Format. Die Manpage von touch(1) scheint nur einen „Zeitstempel“-Wert (mehr oder weniger festes Format, das Monate, Tage, Stunden, Minuten usw. verwendet) oder eine „meist frei formatierte, für Menschen lesbare Datumszeichenfolge“ zu akzeptieren.

Gibt es ein anderes Dienstprogramm, das ich mir ansehen sollte?

Danke.

Antwort1

Zumindest in der GNU-Welt:

touch --date=@1403970787 file

Wie mit date.

Antwort2

Mit dem touchBefehl von GNU coreutils (also unter nicht eingebettetem Linux und Cygwin) sehen Sie sich dievollständiges Handbuch(in der Regel lokal im Infoformat verfügbar) zur Dokumentation vonDatumseingabeformate.Epochendatenwerden mit dem Präfix gekennzeichnet @:

touch -d @1234567890 foo

Dies funktioniert auch mit BusyBox (zumindest auf einigen Systemen, es kann von den Kompilierungsoptionen abhängen).

Ich glaube nicht, dass Sie dies mit *BSD touchalleine tun können, aber Sie können aufrufen, dateum die Epochenzeit in ein touchakzeptiertes Format zu formatieren.

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

POSIX bietet bekanntermaßen keine Möglichkeiten, Epochendaten zu manipulieren. Sie könnenPerl verwenden.

Antwort3

Mit perl:

$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

Dadurch wird die Mtime aller Dateien geändert @ARGV. (stat($_))[8]ist die Atime der Datei.

utimeSie können eine Liste von Dateien erhalten. Wenn Sie die Zeit nicht ändern möchten, können Sie Folgendes versuchen:

 $ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

Notiz

utimehängt von der C-Runtime-Bibliothek und dem verwendeten Dateisystem ab. Weitere Informationen finden Sie unter perldoc -f utimeund perldoc perlport.

verwandte Informationen