复制文件后的修改时间

时间:2019-01-28 11:21:11

标签: file perl

在perl 5中,对从旧文件中新复制的文件使用stat,看来mtime是最初创建而不是复制旧文件的时间。

如何获取复印时间? ctime似乎是最接近的,但是文档中有关于跨操作系统兼容性的警告。

2 个答案:

答案 0 :(得分:1)

简单的答案:在大多数情况下您无法做到。

ctime不是文件创建时间。在Linux系统上从man 7 inode引用:

  

最后状态更改时间戳(ctime)                 stat.st_ctime; statx.stx_ctime

     

这是文件的最后状态更改时间戳。变了   通过写入或设置inode信息(即所有者,组,   链接计数,模式等)。

除非

  • 您不需要便携性
  • 在支持它的内核上运行
  • 该文件位于支持该文件的文件系统上。

在Linux系统上从man 7 inode引用:

  

文件创建(出生)时间戳记(btime)   (未在stat结构中返回); statx.stx_btime

     

文件的创建时间戳。这是在文件创建和   随后没有更改。

     

历史上在UNIX系统上不存在btime时间戳记   并且大多数Linux文件系统目前不支持。

答案 1 :(得分:1)

有一些未指定的细节,但是ctime时间戳似乎是最好的内置工具。 (对于Windows,也请参见下面链接的模块。)

在Windows上,根据perlport (Files and Filesystems) inode更改时间时间戳

  

...可能确实是“创建时间戳记”(在Unix中不是)。

如果文件是通过复制创建的,这将直接为您工作。

在Unix ctime中,它确实跟踪inode更改(以及元数据更改),这似乎是您所需要的。只需使用-C file-test operator即可获得此时间戳。

如果复制可能会更新现有文件的内容,我看不到为什么ctime无法正常工作。

注意模块Win32API::File::Time,目的是

  

在MSWin32下提供对文件创建,修改和访问时间的最大访问权限

请参阅文档中的一些警告。我还没有使用过它,现在无法在Windows上进行测试。