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

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

我知道怎么做得到文件的修改时间(纪元格式):

stat --format=%Y <file>

但我一直不知道如何文件的修改时间(纪元格式)。 touch(1) 手册页似乎只接受“时间戳”值(或多或少的固定格式,使用月、日、小时、分钟等)或“大多数自由格式的人类可读日期字符串”。

我还应该研究其他实用程序吗?

谢谢。

答案1

至少在 GNU 世界中:

touch --date=@1403970787 file

就像与date.

答案2

使用touchGNU 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

答案3

perl

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

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

utime可以接收文件列表,如果你不关心更改atime,你可以尝试:

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

笔记

utime取决于 C 运行时库和正在使用的文件系统。请参阅perldoc -f utime和中的更多内容perldoc perlport

相关内容