如何以纪元格式设置文件的mtime?


11

我知道如何以纪元格式获取文件的mtime:

stat --format=%Y <file>

但是我无法弄清楚如何以纪元格式设置文件的mtime。touch(1)手册页似乎只接受“时间戳”值(使用月,日,小时,分钟等的或多或少的固定格式)或“人类可读的日期格式大部分为自由格式”。

我应该考虑其他实用程序吗?

谢谢。


1
始终包括您的操作系统。解决方案通常取决于所使用的操作系统。您是否正在使用Unix,Linux,BSD,OSX等?哪个版本?
terdon

Answers:



1

perl

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

这将更改中的所有文件的mtime @ARGV(stat($_))[8]是归档时间。

utime 可以接收文件列表,如果您不在乎更改时间,可以尝试:

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

注意

utime取决于C运行时库和文件系统正在使用。在perldoc -f utime和中查看更多perldoc perlport


0

使用touch来自GNU coreutils 的命令(即在非嵌入式Linux和Cygwin上),查看完整的手册(通常以信息格式在本地可用)以获取日期输入格式的文档。时代日期以前缀表示@

touch -d @1234567890 foo

这也适用于BusyBox(至少在某些系统上,可能取决于编译选项)。

使用* BSD,我不认为您可以touch单独使用它,但是您可以调用date将纪元时间格式化为可以touch接受的格式。

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

众所周知,POSIX缺乏操纵时代日期的方法。您可以使用perl

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.