在perl 5中,对刚从旧文件中复制的文件使用stat,似乎mtime是最初创建旧文件的时间,而不是复制的时间。
我怎样才能拿到复印时间?ctime似乎是最近的,但是文档中有关于跨操作系统兼容性的警告。
发布于 2019-01-28 11:39:12
简单的回答:在大多数情况下你不能。
ctime是,而不是文件创建时间。引用Linux系统上的man 7 inode:
上一次状态更改时间戳(
ctime)stat.st_ctime;statx.stx_ctime这是文件的最后一次状态更改时间戳。它通过写入或设置inode信息(即所有者、组、链路计数、模式等)进行更改。
除非
引用Linux系统上的man 7 inode:
文件创建(出生)时间戳(
btime) (未在stat结构中返回);statx.stx_btime文件的创建时间戳。这是在文件创建时设置的,以后不会更改。btime时间戳历史上并不存在于UNIX系统中,目前大多数Linux文件系统都不支持该时间戳。
发布于 2019-01-28 19:17:22
有一些未指定的细节,但似乎ctime时间戳是您可以使用的最佳内置工具。(对于Windows,也请参见下面链接的模块。)
根据perlport (文件和文件系统)的说法,在Windows上,inode会改变时间戳。
..。可能真的是“创建时间戳”(它不是Unix中的)。
如果文件是通过复制创建的,这将直接适用于您。
在Unix ctime中,确实会跟踪inode的更改(以及元数据的更改),这似乎是您所需要的。这个时间戳也可以简单地通过-C 文件测试操作符获得。
如果复制可能更新现有文件的内容,我不明白为什么ctime不能工作。
注意模块Win32API::File::Time,其目的是
在MSWin32下提供对文件创建、修改和访问时间的最大访问权限
请在文档中看到一些注意事项。我没有使用它,现在也不能在Windows上进行测试。
https://stackoverflow.com/questions/54400889
复制相似问题