Answers:
考虑提取的.tar存档。通常,提取的文件将具有从存档内容分配的最后修改时间戳记(除非您是时间旅行者,否则通常是过去的时间戳记)。就文件系统而言,这些文件只是刚刚创建的。
还有一些实用程序可以更改现有文件的修改时间,例如在Linux上,这就是touch命令。
cp -p
模仿它的事物(例如rcp -p
和scp -p
,以及rsync
使用-t
或)-a
从源中获取modtime。
如果从头开始创建文件,则其创建时间为“现在”,修改日期为“现在”。现在想象将文件复制到另一个驱动器。Windows将保留修改时间,但是该文件的创建时间将设置为将文件复制到该驱动器的时间(即,在该驱动器上创建文件的时间)。就那么简单。
实际上是正确的:
在Windows上,很容易设置文件的创建和修改时间(如果需要的话,请进行伪造)。您不必更改计算机的时钟。您甚至不需要本地管理员访问权限。您所需要做的就是对相关文件进行写访问。
要使用PowerShell设置文件的创建时间,请使用SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
要使用设置最后修改时间SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
在Linux上,您可以使用-d
标志轻松更改文件的最后修改时间touch
,如Ask Ask Answer所示。在Linux文件系统上并没有真正的文件创建日期的概念(请在Unix&Linux上进一步阅读)。
这里要注意的最重要的一点是,文件修改时间并不是很特别-它与其他任何数据一样存储。无法确定何时实际最后写入或读取数据。
从这里,我们可以看到,总是有可能(不包括CD等一次写入媒体)直接修改驱动器上存储最后修改时间甚至创建时间的位。
实际上,正如其他答案所指出的那样,这在通用操作系统中也是可行的。在Windows中,这是WinAPI SetFileTime
函数提供的,您可以utime
在Linux上执行此操作。诸如此类的工具都touch
建立在这些API之上。
这些API的最常见合法用法是保留修改时间,例如,在复制文件,从存档中提取文件时等。