在perl 5中,对从旧文件中新复制的文件使用stat,看来mtime是最初创建而不是复制旧文件的时间。
如何获取复印时间? ctime似乎是最接近的,但是文档中有关于跨操作系统兼容性的警告。
答案 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上进行测试。